The Most Versatile VoIP Provider: FREE PORTING

Asterisk Hell: A Minefield Navigation Guide for Newbies

We're going to take a serious look at Asterisk® through the eyes of a typical new user today. Our objective is to turn newly built Asterisk servers into stellar performers, IP telephony systems that work reliably without the quirks that are all too familiar to those of us who have tiptoed through the minefield for many years. Whether you've chosen to run PBX in a Flash, or a trixbox system, or Elastix, or rolled your own Asterisk system, that's the least of your problems. And it doesn't really matter which flavor you chose because most of the pitfalls we'll be discussing today apply more or less to all of the distributions. Our yardstick for whether your system is performing satisfactorily is straightforward. When your significant other begins screaming for the return of a plain old telephone, you know, one where people on the other end of a call can actually hear what you're saying... you've got a problem.

Download Blues. You can't build an Asterisk-based turnkey system without knowing how to deal with an ISO download. If you have questions about how to create a usable CD from an ISO download or, if your newly minted CD won't boot, follow these simple steps. With a Mac, use Roxio Toast. Choose Copy, click Image File, and drag the ISO file you downloaded into the folder. Click Burn after inserting a blank CD. If you don’t own Toast for your Mac, go to the Applications->Utilities folder and run Disk Utility. Click on Images->Burn from the Title Bar and choose the ISO file you downloaded. Then click Burn to begin. For those in the PC World, you’ll need either Roxio Easy CD Creator or Nero to create a CD from an ISO image. With Easy CD Creator, choose Create Data CD. Then in the File menu, select Create CD from Image, and choose your downloaded file. Now click burn to begin. With Nero, go to Recorder from the top menu and choose Burn Image. Select your download file. Then from the Burn Compilation Window, choose Burn to begin.

Hardware Nightmare. Our Wild Ass Guess (WAG) would be that 90% of the installation problems experienced by new Asterisk users are directly related to crappy hardware. If it sounds like we're tired of hearing about this, you'd be right. The issues range from clone X100P cards that don't work (those that do work usually don't work for long!) to 10 year old systems that barely work to $3,000 top-of-the-line dual everything systems that Linux simply does not yet recognize because the hardware is so new that the glue isn't even dry on the motherboard. The video card is brand new, the onboard network adapter has been in production less than a month, and the SATA RAID drive adapter has been customized just for Dell. Guess what, Dude? The operating system won't load. ATTN: Everybody. Do yourself (and us) a favor. Throw your 10-year-old system in the recycle bin where it belongs. And don't replace it with the most expensive new system from Dell that you can find. We've got nothing against Dell by the way. Keep in mind that we're not loading Windows Vista Premium Deluxe that needs 10,000 horsepower to get out of bed every morning. For a Linux-based telephony server that is going to support under 100 people, the $3,000 server is just overkill and will cause many more problems than it solves. Instead, scratch together $200 and buy yourself a new WalMart Special, a.k.a. the Everex Green PC. You also can get one from NewEgg if you hate WalMart.everything. Now add a gig of RAM for $25 and call it a day. Bottom line: It works. It's reliable. It's new. And it's got performance to spare. Worried about a system failure? Then buy two of them, and we'll show you how to build mirrored servers in coming weeks.

Hardware Nightmare, Part II. For newbies that skimp on hardware, their next purchase is usually the cheapest SIP telephone on the planet. Don't! It's a Death Wish Come True. A week later you'll be wondering why all your friends say it sounds like you're calling from a tunnel. The Little Mrs., of course, has long since begun making all of her calls on a cellphone... which tells you how bad your new system really is! Our advice: Take the $200 you saved buying the WalMart Special above, and buy yourself ONE decent SIP telephone. You'll never be sorry. The Aastra 57i is a perfect phone, period. You can read why here. We even have free software that will automatically configure Aastra 57i's for you. All you have to do is plug it in. And, if you like the flexibility that comes with cordless handsets, splurge for the 57i CT for about $100 more, and you'll have the best phone plus one or more cordless handsets with incredible range.

Software Nightmare. Whether you barely understand Linux or consider yourself a Linux guru, unless you know just as much about Asterisk, save yourself (and the existing Asterisk community) weeks and weeks of headaches. Download one of the Asterisk aggregations that's already been built for you such as PBX in a Flash. In the case of PBX in a Flash, it includes all of the source code necessary to recompile anything on the system once you get your feet wet. Believe it or not, the people that put these aggregations together have decades of Linux, networking, and telephony experience. They actually know what they're doing (in most cases), and the FreePBX web interface to Asterisk that is included in most of these packages was written by some of the best Asterisk gurus on the planet. These aggregations are self-contained ISO images that include the operating system and every piece of the puzzle that you'll need to get an Asterisk system up and running in under an hour. No small feat! If you pick the right one, everything works out of the box, and you can keep it current by issuing one simple command from the Linux prompt... any time you like. It's also easy to add your own pieces down the road using the included compiler and compilation tools. For those that say "I wanna learn as I go" but don't know the difference in a Dialplan, a Bedpan, and a Portapotty (HINT: see inset), here's a tip. Start with an aggregation and then build your own Asterisk system from the ground up... in about six months after you return from Asterisk Bootcamp. In the meantime, pick up a copy of Linux for Dummies. If you're too cheap to cough up the twenty bucks, at least read Joe Roper's Conversational Linux for Newbies. It's free.

It's Your Firewall, Stupid. I wish I had a nickel for every message thread that has been written that goes something like this. "I can make calls out of my system, but the people I call can't hear me." Or vice versa. The answer is pretty simple if you stop and think about it for a second. A phone call has two participants. One talks and the other one listens. Then you take turns. At least that's the theory. For that to actually work in the world of Internet telephony, the talking legs of the call have to be able to get from Point A to Point B and from Point B to Point A. If your IP-based telephone or Asterisk system is sitting behind a firewall/router, you have to configure your router to pass the incoming data into the server and telephone on your private network. If the telephone or Asterisk system on the other end of the call happens to also be sitting behind a firewall/router, then we have what's called "double NAT issues." And, no, this doesn't refer to no-see-ums on a steamy summer night in Dixie. Bottom line: If any of this communications traffic can't find it's way to the other end, then someone can't hear all or part of the telephone conversation.

To fix NAT problems with Asterisk, you simply tell your router to forward all data received on UDP ports 4569, 5004 to 5037, 5039 to 5082, and 10000 to 20000 to the private IP address of your Asterisk server. You also must make certain that the following entries exist in /etc/asterisk/rtp.conf:

[general]
rtpstart=10000
rtpend=20000

And bindport = 5060 must exist in the [general] context of /etc/asterisk/sip.conf. The aggregations take care of the rtp.conf and sip.conf setups for you. But you must reconfigure your router/firewall. Last, but not least, you probably need to complete the next step below as well.

Wherefore Art Thou, Server? If you plan to add additional telephones to your system which are not behind the firewall with your Asterisk server, then those phones have to know the public IP address of your server... all the time. The same holds true with some Internet telephony hosting providers. In lieu of a static IP address, you can use a fully-qualified domain name, e.g. mypbx.dyndns.org. This avoids a problem if your Internet service provider only gives you a dynamic IP address which changes from time to time. There's one more step in making this work. You have to set this information up in Asterisk. Here's how.

Log into your Asterisk server as root and edit sip_custom.conf: nano -w /etc/asterisk/sip_custom.conf. The entries depend upon whether your Internet connection has a fixed IP address or a DHCP address issued by your provider. In the latter case, you also need to configure your router to support Dynamic DNS (DDNS) using a service such as dyndns.org. If you have a fixed IP address, then enter settings like the following using your actual public IP address and your private IP subnet:

externip=180.12.12.12
localnet=192.168.1.0/255.255.255.0      (NOTE: The first 3 octets need to match your private IP addresses!)

If you have a public address that changes and you're using DDNS, then the settings would look something like the following:

externhost=mypbx.dyndns.org
localnet=192.168.0.0/255.255.255.0      (NOTE: The first 3 octets need to match your private IP addresses!)

Once you've made your entries, save the file: Ctrl-X, Y, then Enter. Reload Asterisk: amportal restart. If you assigned a permanent IP address, reboot your server: shutdown -r now.

Be aware that, with some hosting providers, you may experience problems with the externhost approach outlined above. If your ISP only gives you a dynamic IP address, you still can use the externip approach above so long as you have a method to frequently verify your IP address. The approach we actually use on our network is to run a little script every 5 minutes. If it finds that your outside IP address has changed, it will automatically update your sip_custom.conf file with the new address. To use this approach, create a file in /var/lib/asterisk/agi-bin named ip.sh. For this to work, you have to be able to ping your fully-qualified domain name and get a response! Here's the code:1

#!/bin/bash
fqdn="mypbx.dyndns.org"
localnet="192.168.0.0"
externip=`ping -c 1 $fqdn | cut -f 2 -d "(" | cut -f 1 -d ")" -s ↩
| grep -m 1 ^`
if [ -e /tmp/$externip ] ; then
echo No IP Update Required ;
else
echo IP Update Required ;
touch /tmp/$externip ;
echo "externip=$externip" > /etc/asterisk/sip_custom.conf
echo "localnet=$localnet/255.255.255.0" >> /etc/asterisk/sip_custom.conf
asterisk -rx "dialplan reload" ;
fi

On line 2 of the above code, enter the fully-qualified domain name for your server that is registered with your DDNS host. Take a look at this thread for information on DNS-O-Matic which is free.

On line 3, enter the internal subnet for your server. This is usually 192.168.0.0 or 192.168.1.0. YMMV!

Save the file and give it execute permissions: chmod +x /var/lib/asterisk/agi-bin/ip.sh. Then make asterisk the file owner: chown asterisk:asterisk /var/lib/asterisk/agi-bin/ip.sh.

Finally, add the following entry to the bottom of /etc/crontab:

*/5 * * * * asterisk /var/lib/asterisk/agi-bin/ip.sh > /dev/null

Snap, Crackle, and Pop. No. Your phone calls are not supposed to sound like a bowl of Kellogg's Rice Krispies. If they do, it usually means your Internet bandwidth is insufficient to support a reliable VoIP call. Using an uncompressed codec such as ULAW, a single call requires roughly 128 kbps of bandwidth in both directions for a reliable conversation. A full T1 can handle roughly 20 simultaneous calls. If you have a dial up Internet connection, do your friends a favor. Go back to tin cans and a string. It'll work just as well and maybe better. Keep in mind that most ISPs do not offer any QOS guarantees with their service and upstream bandwidth is severely restricted. Not surprisingly, this seems to have gotten worse as more and more ISPs try to steer their customers towards their own VoIP offerings. If you have Internet bandwidth to spare but have a busy LAN, you may want to consider a router that provides increased throughput for certain types of data, e.g. SIP and IAX traffic. Most gaming routers provide good traffic shaping functionality. For example, the dLink DGL-4300 Gaming Router provides excellent results and is currently available at Amazon for under $85 after rebate. Another option is to use a different codec for your calls. See this table for the bandwidth calculations. But be aware that as VoIP data gets compressed, you also run the risk of serious degradation in calls if there is any appreciable packet loss because of the geometric effect this has on compressed data. See this thread for some other troubleshooting tips.

Got Those Disappearing Email Blues. Where did my emails go? Nowhere is the usual answer. Sending email messages with your latest voicemails attached is a wonderful feature that PBX in a Flash and other FreePBX-based systems fully support. There are two common problems in sending emails from your LAMP-based Asterisk server. Either your server isn't configured to send out email or your ISP is blocking the transmission of emails that originate from your system. It's usually easier to troubleshoot email problems by first determining whether your ISP is blocking the emails. Then it's pretty simple to test whether your server is properly configured to send the messages... but, first, a brief history lesson.

Many ISPs don't like downstream servers that function as so-called SMTP hosts because of SPAM and email relay hosts. An improperly configured SendMail server can be used to generate thousands of messages an hour from anyone with an Internet connection. One of the first SPAM messages we received after creation of the Department of Homeland Security was a message using a DHS sendmail server as an email relay host. That inspired confidence. To avoid this problem, ISPs do several things. Typically they block port 25 on their servers so that you can't send out email from downstram SMTP servers. Instead, you have to use their SMTP server to send all outbound email. Comcast takes it a step further. On some systems, they block port 25 on your cable modem so that email never leaves your home or office. Do they typically tell you when they do this? Of course not. While all of this is done in the name of reducing SPAM, it's also a convenient excuse for imposing service restrictions which also happen to save them bandwidth... which you are paying for.

To test whether your ISP is blocking port 25, log into your Asterisk server as root and issue the following command:

telnet nerdvittles.com 25

If your provider isn't blocking port 25, you should get a response like this:

Trying 69.89.21.89...
Connected to nerdvittles.com (69.89.21.89).
Escape character is '^]'
220-We do not authorize the use of this system to transport unsolicited,
220 and/or bulk e-mail.

If your ISP is blocking port 25, then the first step to get email flowing from your Asterisk server is to reconfigure SendMail in one of two ways. You can either send the messages through your ISP's SMTP server (and this won't work if port 25 is blocked on your cable modem!) or you can send secure messages using gMail as your SMTP relay host on port 587. This requires that you set up a free gMail account first. For detailed instructions on the gMail setup, go to this message thread and follow the instructions. For an example of using Comcast as your SMTP relay host using port 587, read this thread.

Now we're ready to configure your Asterisk server to reliably send out email messages. There's a simple trick to get this working. A fully-qualified domain name for your server must match the "from" address for the email messages that are sent. This domain does not actually have to be accurate so long as you don't expect to get return emails. Think of it as putting a fake return address on a letter which you mail. It doesn't keep the letter from getting to the designated destination. It just means that you'll never get it back if it were incorrectly addressed. So... our recommended scenario is to do the following. Log into your server as root and edit /etc/hosts. Insert pbxinaflash.dyndns.org in front of pbx.local and separate the entries with a space. Save the file and then restart your network: service network restart. Now edit /etc/asterisk/vm_general.inc and change the serveremail line to read as follows: serveremail=vm@pbxinaflash.dyndns.org. Save the change and reload your dialplan: asterisk -rx "dialplan reload".

Finally, we want to send a test message to be sure everything works. Then you can use FreePBX to tell Asterisk to deliver voicemails to your email address by editing your Extensions settings. To send a test message, log into your server as root and type the following using your real email address. Wait a minute and then check your mailbox (including your SPAM mailbox) to be sure you got it somewhere.

echo "test" | mail -s testmessage nerduno@dyndns.org

Decipherable TouchTones Really Are Part Magic. For the poor soul that finally has a system where he can both speak and hear on the phone (just like in the Old Days), the next hurdle usually rears its head the first time you connect to your favorite doctor's office or credit card company and need to press zero for customer service. After pressing 0 for the hundredth time, you conclude that the buttons on your phone are not working. Before too long, you rightly conclude that there's something wrong with Asterisk. Correctomundo! If you want the technical reason for why you may have lost DTMF signalling, take a look at the RFC. To put it down where the goats can get, if you go into a Chinese restaurant where only Chinese is spoken and you happen to only speak English, chances are you may leave hungry. In the world of touchtones and Asterisk, there are several different dtmfmode settings. There's one for your phone to communicate with your Asterisk server, there's another for your server to communicate with your phone, there's another for your Asterisk trunk to communicate with your provider, and there's another for your provider to talk to you. Now multiply all those combinations by two for communications with another party, and you'll have some idea of the technical hurdles... even with a perfect connection between Party A and Party B. In short, perhaps you just should be thankful you can hear the person at the other end of the call at all.

If different portions of the call are using different DTMF settings and with some compressed codecs, the touchtones cannot be deciphered at the other end of the call. There are several things you can do to improve your chances of DTMF tones working. First, use a reliable provider and buy decent phones. Second, set your server trunks, extensions, and your phones to dtmfmode=rfc2833 and see how it goes. If you still have problems, try adjusting the dtmfmode settings on just your phone and extension to some other value supported by your phone. These two must match. Try dtmfmode=inband and dtmfmode=info. Next, make certain that the dtmfmode setting for your trunk matches what your service provider is using to communicate with your server. This pair of settings must match as well. If you still don't have any luck, try a little Googling for the dtmfmode for your phone type and your provider. If it worked for someone else, chances are it will work for you. If all else fails, try another phone or a more reliable telephony service provider. Assuming you can understand them, you typically can tell whether your service provider understands the problems within about 30 seconds after the music on hold ends... which brings us to our favorite topic.

My Telephony Provider SUX. Yes. There are telephony providers and then there are telephony providers. As with most things in the world, you get what you pay for. Cheap telephony rates don't always mean crappy service, but it certainly improves your chances. All-you-can-eat plans are notoriously dangerous. Even if the telephone service is fairly good, the terms of service typically are shocking. Some even force you to agree to pay exorbitant backdated fees plus attorneys' fees if they, in their sole discretion, determine that you have used your plan for unauthorized calling.

We've got some tips that we repeat often so if you've heard them already, skip along to the next topic.

  • Rule #1: If your business depends upon incoming telephone calls, don't use VoIP telephony service for all of your incoming calls. What you may want to do is order a single business line from AT&T and take Marty Tennant's advice: "You can order an arrangement called 'call forward/busy multi-path' from AT&T (confirm this beforehand) that will allow multiple call forwarding instances to another number (the VOIP one in this case)."
  • Rule #2: Do some reading on which providers have good reputations. We also have a good list of providers that we regularly recommend.
  • Rule #3: With pay-as-you-go termination providers for outbound calls, it doesn't cost you a dime to have numerous trunks provisioned and working on your Asterisk system. If a termination fails using your preferred provider, Asterisk will simply drop down the list until it can successfully complete the call. So don't ever put all your eggs in one basket for terminations.
  • Rule #4: All-you-can eat incoming service with a free DID is still a very good deal at least in the United States and Canada. See our list for suggestions.
  • Rule #5: Toll-free numbers no longer have to be expensive. See our recommendations for reasonably priced toll-free numbers, and give your business a shot in the arm for almost nothing!

What Happened to CallerID? CallerID really is the last vestige of the old Ma Bell monopoly. CallerID numbers are easily deciphered on almost all Asterisk systems regardless of your DID provider. This is true on inbound and outbound calls. CallerID name is a different story. The short answer is that the Baby Bells all maintain their own telephone directories. And chances are you're not in it if you're using VoIP telephony service. These companies seek to preserve their telephone monopoly by *NOT* processing CallerID names that are received from "foreign" systems. Instead, they take the CallerID number that is provided and look up the name in their proprietary directory. No entry = No CallerID Name display. So... the short answer is that, for outbound calls from your system, it does no good to send CallerID Name information. Almost every provider throws it in the bit bucket.

That still doesn't explain why you can't get CallerID names for incoming calls. Here's where your DID provider matters. Some of them subscribe to baby Bell-supported service that provides the names, and others don't. If your DID provider doesn't, then you can either set up your own service to supply CallerID name information, or you can get a new DID provider. For the best homegrown CallerID name service, we recommend Ultimate CNAM from Titanous. It works well on all PBX in a Flash systems and is extremely flexible in the choices provided for name lookups. It currently supports eight lookup providers: AsteriDex, WhoCalled.Us (registration required), Whitepages.com, AnyWho.com, Canada411.com, Google Phonebook, TelcoData (Ratecenter), and Fonetastic (Ratecenter).

My Passwords Don't Work Any Longer. What is it about Asterisk that makes everyone want to screw around improving their passwords? Leave them alone! So long as your initial root password is secure, you're absolutely safe from intruders except someone with physical access to your machine (even on the Internet) if you just do the following. First, using a web browser, go to the IP address of your new server. Click on Administration and then Menu Configuration and enter an Admin password that is as secure as your root password. Second, open FreePBX and click on Setup and then Administrators. Change the password for admin to something equally secure. Third, go to the Linux command prompt. Type each of the following commands and enter a secure password for each.

passwd-maint
passwd-amp
passwd-meetme
passwd-webmin

Now leave your damn passwords alone for at least six months unless you are tortured and forced to reveal all of your innermost secrets. If the annoying FreePBX password reminders bug you, then go to this link and follow the instructions to make the reminders disappear. Then leave your system alone for a week to make sure everything works reliably. Now you're free to add one new thing every other day checking often to make sure it didn't break something that was previously working. When you add ten new things at once, it's virtually impossible to put Humpty back together again. But, of course, you knew that. Enjoy!


PiaF Without Tears. Ben Sharif's PiaF Without Tears tutorial (all 208 pages) was released last week. For those that haven't yet taken a look, you're missing a treat!

Coming Attractions. With the new PBX in a Flash 1.2 release, there now are four different versions of Asterisk that can be installed: 32-bit Asterisk 1.4, 64-bit Asterisk 1.4, 32-bit Asterisk 1.6-beta, and 64-bit Asterisk 1.6-beta. Next week we'll address the installation issues with the Nerd Vittles applications using each of these new systems and expose a few more potholes in the Asterisk minefield. And we may have a new AsteriDex 4 add-on for you as well.

Nerd Vittles Cepstral Demos with Allison TTS (courtesy of les.net). You now can take some Nerd Vittles projects for a test drive... by phone! And it provides a good example of the VoIP quality you can expect with hosted service from Aretta Communications. The current demos include all five new applications preconfigured for Cepstral with the Allison TTS voice: (1) MailCall for Asterisk with password 1234 (retrieve POP3 email by phone), (2) NewsClips for Asterisk (latest news headlines in dozens of categories), (3) Weather Forecasts by U.S. Airport Code, (4) Weather Forecasts by U.S. ZIP Code, and (5) Worldwide Weather Forecasts.

The WalMart Special. We continue to believe that the Everex gPC (aka The WalMart Special) is an almost perfect server for Asterisk implementations with less than 30 simultaneous calls and up to 100 or so extensions. At $199, you can't beat the price. To make things even easier, we will have a preconfigured 2-CD ISO installation set for either the 32-bit Asterisk 1.4 or 1.6-beta version of PBX in a Flash in the next few weeks. It'll include all of the Nerd Vittles goodies plus a full system automatic backup system. All you'll need to add is a 4GB flash drive (about $15) for your weekly backups, and you'll never have to worry about losing your system again! So order your unit, and you'll be ready for the rollout. Here's the WalMart link and the NewEgg link for the latest hardware version. Add a gig of RAM for $25, and you'll have the perfect telephony server platform to begin your Asterisk adventure.


 

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...

  1. Join the following line as part of the line above when you see the ↩ character in the code. []

Introducing AIM Call Out for Asterisk

Today we’re taking a Margarita Break from our shiny new PBX in a Flash 1.2 server to play with AOL’s new AIM® Call Out. AOL actually introduced the service as an Open Voice API, but it walks and quacks like a SIP termination gateway so that, of course, tempted us to try it. Since it is SIP-compatible, we thought it would be fun to see if we could get it working with Asterisk®. It didn’t take long. This is a great opportunity for all of us that live and breathe Asterisk because of AOL’s huge infrastructure. You can sign up from anywhere in the world and call over 200 countries. Plus, their pricing is competitive. Worst case: It provides another layer of redundancy for every Asterisk-based telephony system. Complete rate table is available here.

Prerequisites. If you want to follow along with our five-minute setup, then you’ll need a LAMP-based Asterisk server with FreePBX. PBX in a Flash, trixbox, and Elastix all should work. You’ll also need an AOL account if you don’t already have one. Then you’ll need to sign up for the AIM Call Out service before we reconfigure a trunk in Asterisk to support the AOL offering. Nothing in the AIM Call Out Terms of Service precludes use with Asterisk so long as it is for home or small business use and not for resale of phone service. This is not legal advice, blah, blah, blah…

Getting Started with AIM Call Out. If you don’t already have an AOL account, you can sign up for free. Or just pull out one of the thousands of CDs they mailed you and register. Once you have an AOL account name, head over to the AIM Call Out web site and register for the service. Don’t use your AOL password for your AIM Call Out service. After all, this is SIP. You will need a credit card because you’re signing up for pay-as-you-go minutes. Five bucks will get you started. The published rates are reasonable at 1.7¢ per minute for U.S. calls and 2¢ per minute to Canada, Mexico City, England, China, Germany, and Australia. We used the word "published" advisedly…

AOL Math: 1.7 + .3 = 4   AOL has taken a page from Ma Bell in terms of creative mathematics. With each call, AOL first rounds UP the time of the call to the next minute and then rounds UP the total price to the next penny. Here’s the way their Terms of Service describe it: "For point of clarity, the rounded up minutes are multiplied against the current rate effective at the end of the call (generally based on the location the call is placed) and then rounded up to whole cents (USD)." So a 70-second call in the U.S. (which should cost under 2¢ at 1.7¢ per minute using Plain Old Math) actually is billed to you at 4¢. Charitably speaking, it’s creative to advertise the cost of a call in the U.S. as 1.7¢ per minute with all the rounding that is taking place. For short calls, it can be more than double that rate once you factor in AOL’s double rounding. In our example, the 70-second call is first rounded up to 2 minutes. And then the cost of the call is computed at 3.4¢ for the already rounded up call. Then the 3.4¢ computation is rounded up to 4¢. So you see 1.7 + .3 really does equal 4 in the bowels of AOL. And welcome to a class action law suit about a year down the road if we were betting. You’d think the bean counters would learn sooner or later that you can’t publish a 1.7¢ per minute rate in the headlines and then bury a very different pricing scheme in the fine print. Ma Bell, of course, turned rounding into an art form, and AOL has simply picked up where the Baby Bells and the cell phone companies left off. And, lest we forget, six months of non-use, and your minutes (and money) disappear just like with Skype. There also are some weird rules about how much money you can spend for the first several months of use. That’s probably a good thing. They get to watch how you behave, and you get to carefully evaluate their service and performance. In the meantime, please join us in asking AOL to clean up their act and return to performing simple addition the old-fashioned way. </whining>

Now, where were we? Once your account is set up, you’ll need three pieces of information: your userid, your password, and the name of the AIM SIP gateway: sip.aol.com:5060.

Configuring an AOL Trunk in FreePBX. With relatively recent versions of FreePBX, there are two steps to get your new termination service with AIM Call Out functioning. We need to add a Trunk. And then we need to add an Outbound Route to your dialplan. To add the new trunk, click on Setup, Trunks, Add SIP Trunk in the FreePBX web interface. You can leave the General Settings, Incoming Settings, and Registration blank for now because AOL won’t let you set your CallerID and AOL won’t sell you a DID… yet. You might want to include your CallerID info just so it’ll be there if AOL ever enables the feature. For now, when you dial out through AOL, your callees will get a number displayed which, if called, plays a 30-second ad for the AIM Call Out service and then hangs up.

For the Outgoing Dial Rules, we set up our AOL service so that we dial a 6 prefix to use AOL. Then you must dial a "1″ and area code and number in the U.S. to complete a call. For other countries, you’d dial the country code, city code, and number. So our entry for U.S. calls looks like this:

6|1NXXNXXXXXX
6|1+NXXNXXXXXX

The important piece to get things working is the Incoming Settings. Name the trunk AOL or whatever you prefer. The remaining PEER Details should look something like the following using your userid and password obviously:

dtmfmode=rfc2833
host=sip.aol.com
insecure=very
nat=yes
secret=YourPasswordHere
sendrpid=yes
type=friend
username=YourAOLaccountname@aim.com

Once you save your trunk settings and reload the dialplan, then choose Setup, Outbound Routes, Add Route. Again, we’re using a dialing prefix for this service so you’ll want to be sure you move the route toward the top of your list of outbound routes when you’re finished to make sure it snags all outbound calls starting with 6 and 10 or 11-digit numbers. Here are our settings for the outbound route:

Route Name: aol
Dial Patterns:
61NXXNXXXXXX
6NXXNXXXXXX
Trunk Sequence: SIP/AOL

Save the settings and then move the outbound route to the top of your route listing. Then reload the FreePBX dialplan, and you’re done.

Overall Impressions. We’d rate the service and call quality as pretty good based on a quick look. The pricing is reasonable except on very short calls, and the Terms of Service aren’t overly offensive. In fact, if we were betting, we’d predict that AOL will offer an all-you-can-eat plan in the very near future. For now, when your call credit is getting low, you will get an email as well as a whispering voice in your ear that you’re about to run out of minutes. Could be worse. We also had no problem placing multiple, simultaneous outbound calls through the service. That’s good news for Asterisk users. For an excellent review and some good tips on AIM Call Out generally, see Dan York’s blog. Enjoy!


Late-Breaking News Flash. Ben Sharif’s PiaF Without Tears tutorial (all 208 pages) has just been released. Forget about the contents. You know that’ll be terrific like all of Ben’s previous works. But wait until you see the cover!

PBX in a Flash 1.2 Update. The response to PBX in a Flash 1.2 continues to be a bit overwhelming. If you read last week’s article, you already know that, for the first time, there now is a turnkey LAMP install that supports 32-bit and 64-bit versions of CentOS as well as the latest 32-bit and 64-bit releases of Asterisk 1.4 and Asterisk 1.6-beta. Now’s your chance to really do some experimentation. The performance of the 64-bit install is eye-popping on both a dedicated machine and running under VMware. And the Asterisk 1.6 beta has some new features that are well worth a careful look. Don’t use it in a production environment obviously!

For the first time, you now have to be careful in loading new applications because many 32-bit apps don’t play nicely (or at all) on a 64-bit version of Asterisk and CentOS. Here’s a gotcha that you need to watch out for. You can’t use a 32-bit version of Cepstral or a 32-bit Cepstral voice on a machine running the 64-bit version of PBX in a Flash. And you can’t load the Asterisk 1.4 interface to Cepstral on a machine running Asterisk 1.6-beta. So… we have reworked our tutorial on Cepstral to reflect the proper download locations for all four new flavors of PBX in a Flash 1.2.

And, of course, Digium® has broken some applications that worked just fine under Asterisk 1.4. In the next few weeks, we will provide a road map for all the Nerd Vittles applications and what it takes to get them running under Asterisk 1.6. But, if you want the short answer, everything including MailCall works on both 32-bit and 64-bit versions of Asterisk 1.4. And everything including MailCall works on 32-bit and 64-bit versions of Asterisk 1.6 once you execute the following command after installing all of the Nerd Vittles apps you wish to use. MailCall takes some special care to set up. See this message thread.

sed -i 's|\||\,|g' /etc/asterisk/extensions_custom.conf

One might ask why it was necessary to (again) ruin existing dialplans by changing vertical bars to commas. Another brilliant performance enhancement in Asterisk 1.6 courtesy of Digium and the Asterisk Development Team. NOT!


 

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…

Introducing PBX in a Flash 1.2: The Leaner, Meaner Asterisk Machine

We're just shy of the six month birthday for PBX in a Flash. So what better time to introduce version 1.2 which is chock full of new telephony goodies to whet your appetite for Internet Telephony. Tom King and Joe Roper have worked their usual Magic™ to come up with a pair of new ISOs that are nothing short of spectacular. Not only is PBX in a Flash leaner and meaner, but it's now incredibly flexible. You don't get the kitchen sink in PBX in a Flash ISOs. Instead you get a rock-solid CentOS 5.1 operating system on which to build an Internet telephony server that meets your specific needs. Want a 64-bit operating system? We've got it. Prefer to stick with a 32-bit operating system? We've got you covered there, too. Want to experiment with Asterisk® 1.6-beta? We've got it. Want to stick with Asterisk 1.4 for a production environment? We've got you covered. Do you prefer LVM, ext3, or SATA RAID for your disk drives? Well, take your pick. PBX in a Flash 1.2 now supports all of them. For those with a physical handicap, you now can install the complete system with no user intervention by typing ksauto at the first prompt. And, for PBX in a Flash development partners, we've even designed a 2-CD install set that makes generation of multiple systems with minimal Internet access a reality.

A Better Mousetrap. Asterisk-based LAMP aggregations, of course, are plentiful today, but we think we have a better mousetrap. Here are a few reasons why? First, PBX in a Flash is the only distribution that is totally source-based with Asterisk compiled from source. What that means is when you purchase add-on hardware and it has a problem for some reason, all of the tools are already in place for you to contact the manufacturer or reseller and have them reconfigure or recompile whatever is necessary on your system to get you back in business quickly. It also means that most of our applications are compiled from source on your specific hardware which assures a more reliable and stable software platform on which to build your telephony system.

Second, we don't release PBX in a Flash ISOs every other week. We don't have to. Every time a new security patch is released for Asterisk, the "other guys" have to create a new RPM or ISO to support it. That means your system is vulnerable while this process is underway. In many cases, it means reinstalling a new ISO and starting over. I wish I had a nickel for every time I reinstalled and basically started over with Asterisk@Home or trixbox. With PBX in a Flash, you simply type update-source at the command prompt and your system is brought current without missing a beat. The total downtime for your system is typically under 15 minutes!

Third, PBX in a Flash uses a two-step install process that all but eliminates the ISO obsolescence issues that have plagued other distributions. The PBX in a Flash ISO is used to install either the 32-bit or the 64-bit CentOS 5.1 operating system. When that process completes, the installer then searches multiple sites on the Internet for our "payload file" which contains the latest, greatest version of Asterisk which is compiled on-the-fly. The payload script also installs FreePBX and many of the customized features that make PBX in a Flash unique. If you need additional functionality, we have an entire web site, pbxinaflash.org, dedicated to add-on scripts, and it also has gotten a facelift. And, by the way, our typical add-on script installs without user intervention in under a minute. So... install what you need and skip the BloatWare. Using this design, most bugs are eliminated as well without your having to do much of anything. Translation: More siesta time. Less all-nighters!

Here's another reason that all of this matters. This is a true story that will give you a good handle on the flexibility that our design strategy brings to the table. We quietly introduced PBX in a Flash 1.2 to our loyal fan club last Wednesday. Within an hour after its release, the Asterisk Development Team announced a security patch and distributed new versions of Asterisk 1.4 and 1.6. Tom King, who was responsible for development of our latest payload files, happened to be scuba diving in the Atlantic Ocean as all of this unfolded. We sent him a text message to alert him to the problem. When Tom came up for some fresh air, he got the message. Then, using a cellphone from his boat, he kicked off an update script that regenerated all of the payload files with the latest Asterisk 1.4 and 1.6 security patches. And 90 minutes after the Asterisk security announcement, new PBX in a Flash 1.2 installs included both new versions of Asterisk. For those that installed their systems within the first 90 minutes, update-sources did the trick.

So today we're proud to introduce the 1.2 release of PBX in a Flash for Linux, Windows, and Macs. It's still the Lean, Mean Asterisk Machine designed to meet the needs of hobbyists as well as business users. Text-to-speech works, Bluetooth works, FreePBX 2.4 is rock-solid, the platform is open, and there already are custom install scripts for both Asterisk 1.4 and Asterisk 1.6 with many more just around the corner, perhaps as soon as this weekend.

As some of our regular readers know, we have been very concerned with the Asterisk development strategy that continues the process of regularly deleting commands and syntaxes with each major version change. Many of us rely upon these commands in building dialplans and vertical market applications for Asterisk so it causes a mess. PBX systems break that used to work. When that happens almost annually, it's a bad thing. One way that we hope to improve the dialogue with the developers is to make it easy for more people to experiment with Asterisk 1.6. Whether you choose our 32-bit or 64-bit ISO, you also have the option to install the latest Asterisk 1.6-beta and get involved in the process. Otherwise, we might as well look forward to annual train wrecks because the developers and Digium don't appear to be budging from their design strategy. You can read all about it here and here. We'll have more to say about it in coming weeks. For today, we're going to keep our sense of humor and walk you through the typical installation scenario to bring up a new PBX in a Flash 1.2 system with the latest version of Asterisk 1.4. When we're finished, you'll have a rock-solid telephony system to begin your Asterisk adventure. So let's get started.

Getting Started with PBX in a Flash 1.2. Begin by downloading either the 32-bit or 64-bit ISO image for PBX in a Flash. Don't worry. If you try to run the 64-bit install on a system that doesn't support it, it'll just sit there so you've got nothing to lose by trying the Ferrari first. As new locations for ISO downloads come on line, we will add them to the download list. Australia came on line yesterday thanks to Jim Lam. So just click on the location nearest to you, and you're off to the races. Once you've got the ISO image in hand, use your favorite tool to burn it to a bootable CD. This next step is the most important. Don't begin your installation until you first download and read Tom King's Installation Guide. It's an easy, non-technical read and will condense the install process to about 30 minutes. There also are loads of other helpful tutorials that are free for the downloading from our support site.

If you're new to all of this, let us recommend you try one of the $199 Everex Green PCs. Both WalMart and Egghead sell them, and they're just about perfect for a home or small business telephony server. And they're much less expensive to operate as well as being environmentally friendly. Just insert the CD containing the pbxinaflash.iso and then reboot the machine you wish to dedicate to PBX in a Flash. After reading Tom's tutorial and the initial prompts and warnings, choose an option and press the <Enter key> to begin the installation. If you want to first check the media for corruption, type linux mediacheck and then press the <Enter> key. When prompted, be sure to choose the option that erases all existing partitions and uses the default partition layout. Then choose your time zone and leave the UTC system clock option unchecked. Next choose a root password for your new system. Make it secure, and write it down. We plan to use this password for virtually everything on your new system. The install process begins. This includes MySQL, Apache, PHP, CUPS, Samba, WebMin, Subversion, SendMail, Yum, Bluetooth support, SSL, Perl, Python, the kernel development package, and much more. In about 15 minutes depending upon the speed of your PC, the install will pause to allow you to eject the CD. Click the Proceed button to continue after removing the CD. You must have an Internet connection now to complete the install so plug in a 10/100 cable if you haven't done so already. After reboot, the system will start up with CentOS 5.1, then download and install Asterisk and FreePBX, and search for the necessary installation script and payload file on pbxinaflash.net. If that site happens to be down, the script will go to pbxinaflash.com for the same payload file. Just to repeat, if you don't have Internet connectivity, then the installation cannot complete. When the installation finishes, reboot your system and log in as root. The IP address of your PBX in a Flash system will be displayed once you log in. If it's blank, type service network restart after assuring that you have Internet connectivity and access to a DHCP server that hands out IP addresses. Typing ifconfig should display your IP address on the eth0 port. Write it down. We'll need it in a minute.

Now that you've logged in as root, you should see the IP address displayed with the following command prompt: root@pbx:~/. If instead you see bash displayed as the command prompt and it's not green, then the installation has not completed successfully. This is probably due to network problems but also could be caused by the time being set incorrectly on your server. You can't compile Asterisk if the time on your computer is a date in the past! For this glitch you have to start over. If it's a network issue, fix it and then reboot and watch for the eth0 connection to complete. Assuming it doesn't fail the second time around, the installation will continue. Likewise, if you do not have DHCP on your network, the installation will fail because the PBX will not be given an IP address. Simply type netconfig, fill in the blanks and reboot. Tom's Guide goes into more troubleshooting detail. The install will recommence.

Required Steps to Complete the Install. There are four important things to do to complete the installation. First, from the command prompt, run genzaptelconf. This sets up your ZAP hardware as well as a timing source for conferencing. If you're using additional hardware for your Asterisk system, we recomend removing the 56K modem when you install the cards. This will help avoid interrupt conflicts. Second, decide how to handle the IP address for your PBX in a Flash server. The default is DHCP, but you don't want the IP address of your PBX changing. Phones and phone calls need to know how to find your PBX, and if your internal IP address changes because of DHCP, that's a problem. You have two choices. Either set your router to always hand out the same DHCP address to your PBX in a Flash server by specifying its MAC address in the reserved IP address table of your router, or run netconfig at the command prompt and assign a permanent IP address to your server. Be aware that netconfig no longer is a part of CentOS 5.1. We added it back in as part of the install. If you update your CentOS configuration, you will need to reinstall it by running update-scripts, then update-fixes, and then install-netconfig. If you experience problems with the process, see this message thread on the forum. The third configuration requirement probably accounts for more beginner problems with Asterisk systems than everything else combined. Read the next section carefully and do it now!

Getting Rid of One-Way Audio. There are some settings you'll need to add to /etc/asterisk/sip_custom.conf if you want to have reliable, two-way communications with Asterisk: nano -w /etc/asterisk/sip_custom.conf. The entries depend upon whether your Internet connection has a fixed IP address or a DHCP address issued by your provider. In the latter case, you also need to configure your router to support Dynamic DNS (DDNS) using a service such as dyndns.org. If you have a fixed IP address, then enter settings like the following using your actual public IP address and your private IP subnet:

externip=180.12.12.12
localnet=192.168.1.0/255.255.255.0      (NOTE: The first 3 octets need to match your private IP addresses!)

If you have a public address that changes and you're using DDNS, then the settings would look something like the following:

externhost=myserver.dyndns.org
localnet=192.168.0.0/255.255.255.0      (NOTE: The first 3 octets need to match your private IP addresses!)

Once you've made your entries, save the file: Ctrl-X, Y, then Enter. Reload Asterisk: amportal restart. If you assigned a permanent IP address, reboot your server: shutdown -r now.

Be aware that some people experience problems with the externhost approach outlined above. If your provider only gives you a dynamic IP address, you still can use the externip apprach above so long as you have a method to frequently verify your IP address. The approach we actually use on our home network is to run a little script every 5 minutes. If it finds that your outside IP address has changed, it will automatically update your sip_custom.conf file with the new address. To use our approach, create a file in /var/lib/asterisk/agi-bin names ip.sh. Here's the code:1

#!/bin/bash
fqdn="mypbx.dyndns.org"
localnet="192.168.0.0"
externip=`ping -c 1 $fqdn | cut -f 2 -d "(" | cut -f 1 -d ")" -s ↩
| grep -m 1 ^`
if [ -e /tmp/$externip ] ; then
echo No IP Update Required ;
else
echo IP Update Required ;
touch /tmp/$externip ;
echo "externip=$externip" > /etc/asterisk/sip_custom.conf
echo "localnet=$localnet/255.255.255.0" >> /etc/asterisk/sip_custom.conf
asterisk -rx "dialplan reload" ;
fi

On line 2 of the above code, enter the fully-qualified domain name for your server that is registered with your DDNS host. Take a look at this thread for information on DNS-O-Matic which is free.

On line 3, enter the internal subnet for your server. This is usually 192.168.0.0 or 192.168.1.0. YMMV!

Save the file and give it execute permissions: chmod +x /var/lib/asterisk/agi-bin/ip.sh. Then make asterisk the file owner: chown asterisk:asterisk /var/lib/asterisk/agi-bin/ip.sh.

Finally, add the following entry to the bottom of /etc/crontab:

*/5 * * * * asterisk /var/lib/asterisk/agi-bin/ip.sh > /dev/null

Getting Your Machine Up to Date. Tom King, one of our lead developers, has gone to great pains to make it easy for you to always have a current system. All you have to do is type a few commands, but you do have to type them. So do it now! After logging in as root, type update-scripts to get the latest PBX in a Flash scripts installed on your system. This doesn't run them, it merely makes them available for you to run them. Once you complete this step, you can always review the latest scripting options by typing help-pbx. Now run update-fixes to apply the latest patches to your PBX in a Flash system. When it completes, you're up to date. If you want the latest version of Asterisk, it's easy! Just run update-source. In the case of PBX in a Flash 1.2, you have the latest version of Asterisk 1.4 or 1.6-beta... at least for today.

Activating Email Delivery of Voicemail Messages. We've previously shown how to configure systems to reliably deliver email messages whenever a voicemail arrives unless your ISP happens to block downstream SMTP mail servers. Here's the link in case you need it. As it happens, you really don't have to use a real fully-qualified domain name to get this working. So long as the entry (such as pbx.dyndns.org) is inserted in both the /etc/hosts file and /etc/asterisk/vm_general.inc with a matching servermail entry of vm@pbx.dyndns.org (as explained in the link above), your system will reliably send emails to you whenever you get a voicemail if you configure your extensions in freePBX to support this capability. You can, of course, put in real host entries if you prefer. For 90% of the systems around the world, if you just want your server to reliably e-mail you your voicemail messages, make line 3 of /etc/hosts look like this with a tab after 127.0.0.1 and spaces between the domain names:

127.0.0.1     pbx.dyndns.org pbx.local pbx localhost.localdomain localhost

And then make line 6 of /etc/asterisk/vm_general.inc look like the following:

serveremail=voicemail@pbx.dyndns.org

Now issue the following two commands to make the changes take effect:

service network restart
amportal restart

The command "setup-mail" can be used from the Linux prompt to set the fully-qualified domain name (FQDN) of the mail that is sent out from your server. This may help mail to be delivered from the PBX. One of things mail servers do to reduce spam is to do a reverse lookup on where the mail has come from, checking that there is actually a mailserver at the other end. You can only do this if you have set up dynamic DNS or if you have pointed a hostname at your fixed IP address. Once you have done this, and assuming your ISP is cooperative, then you will receive your voicemails via email if you wish (this is set within FreePBX),and your PBX will email you when FreePBX needs an update. You set this feature in FreePBX General Settings.

If your hosting provider blocks downstream SMTP servers to reduce spam, here's a simple way to use your gMail account (free!) as your SMTP Relay Host. Then you never have to worry about this again!

Setting Passwords and Other Stuff. Be aware that there is a major security hole in FreePBX. Using FreePBX admin security alone will not protect your system from a web attack and may compromise root access to your entire server. For this reason, we recommend that you log in as root and immediately run passwd-master. This establishes Apache htaccess security on your FreePBX web interface. After running this conversion utility, you can only log into the FreePBX admin interface with the username maint (not admin) and the password which you establish when you run the utility.

Other passwords can be set in your system with these commands:

passwd... reset your root user password
passwd-maint... reset your FreePBX maint password
passwd-wwwadmin... for users needing FOP and MeetMe access
passwd-meetme... for users needing only MeetMe access
passwd-webmin... for users needing WebMin access to your server (very dangerous!)

There's also an Administration password that you can set in the KennonSoft UI that displays when you point your browser to the IP address of your server. Do NOT use the same password here that you use elsewhere as it is not overly secure.

Configuring WebMin. WebMin is the Swiss Army Knife of Linux. It provides TOTAL access to your system through a web interface. Search Nerd Vittles for webmin if you want more information. Be very careful if you decide to enable it on the public Internet. You do this by opening port 9001 on your router and pointing it to the private IP address of your PBX in a Flash server. Before using WebMin, you need to set up a username and password for access. From the Linux prompt while logged in as root, type the following command where admin is the username you wish to set up and foo is the password you've chosen for the admininstrator account. HINT: Don't use admin and foo as your username and password for WebMin unless you want your server trashed!

/usr/libexec/webmin/changepass.pl /etc/webmin root password

To access WebMin on your private network, go to http://192.168.0.123:9001 where 192.168.0.123 is the private IP address of your PBX in a Flash server. Then type the username and password you assigned above to gain entry. To stop WebMin: /etc/webmin/stop. To start WebMin: /etc/webmin/start. For complete documentation, go here.

Updating and Configuring FreePBX. FreePBX 2.4 is installed as part of the PBX in a Flash 1.2 implementation. This incredible, web-based tool provides a complete menu-driven user interface to Asterisk. The entire FreePBX project is a model of how open source development projects ought to work. And having Philippe Lindheimer's as the Captain of the Ship is just icing on the cake. All it takes to get started with FreePBX is a few minutes of configuration, and you'll have a functioning Asterisk PBX complete with voicemail, music on hold, call forwarding, and a powerful interactive voice response (IVR) system. There is excellent documentation for FreePBX which you should read at your earliest convenience. It will answer 99% of your questions about how to use and configure FreePBX. For the one percent that is not covered in the Guide, visit the FreePBX Forums which are frequented regularly by the FreePBX developers. Kindly post FreePBX questions on their forum rather than the PBX-in-a-Flash Forum. This helps everybody. Now let's get started.

NOTE: PBX in a Flash comes with the IPtables firewall enabled on your system. If this causes problems with access to the FreePBX repository (for loading the FreePBX updates below), you can easily (and temporarily) turn off the firewall. Type help-pbx for assistance. Don't forget to restart the firewall especially if your system has any Internet exposure!

Now move to a PC or Mac and, using your favorite web browser, go to the IP address you deciphered above for your new server. Be aware that FreePBX has a difficult time displaying properly with IE6 and IE7 and regularly blows up with older versions of Safari. Be safe. Use Firefox. From the PBX in a Flash Main Menu in your web browser, click on the Administration link and then click the FreePBX button. The username and password both default to admin. Click Apply Configuration Changes, Continue with Reload, and then Refresh your browser screen. Now click the Module Administration option in the left frame once FreePBX loads. Now click Check for Updates online in the upper right panel. Next, click Download All which will select every module for download and install. The important step here is to move down the list and Deselect Speed Dials and PHPAGI from the download and install options. Once these apps have been deselected, scroll to the bottom of the page and click Process, then Confirm, then Return once the apps are downloaded and installed, then Apply, then Continue with Reload. Now repeat the process once more and do not deselect the two applications, then Process, Confirm, Return, Apply Config Changes, and Continue with Reload. Finally, scroll down the Modules listing until you get to the Maintenance section. Click on each of the following and choose Install: ConfigEdit, Sys Info, and phpMyAdmin. Then click Process, then Confirm, then Return once the apps are downloaded and installed, then Apply, then Continue with Reload. All three of these tools now are installed in the Maintenance section of the Tools tab of FreePBX. One final step, and you're good to go. An update of FreePBX has been released. Click Check for Updates online. Then choose Download and Upgrade for the Core, FreePBX Framework, and System Dashboard modules. Then click Process, then Confirm, then Return once the apps are downloaded and installed, then Apply, then Continue with Reload. You now have an up-to-date version of FreePBX. You'll need to repeat the drill every few weeks as new updates are released. This will assure that you have all of the latest and greatest software. To change your Admin password, click on the Setup tab in the left frame, then click Administrators, then Admin in the far right column, enter a new password, and click Submit Changes, Apply Configuration Changes, and Continue with reload. We're going to be repeating this process a number of times in the next section so... when instructed to Save Your Changes, that means "click Submit Changes, Apply Configuration Changes, and Continue with reload."

Choosing Internet Telephony Hosting Providers for Your System. Before you can place calls to users outside your system or to receive incoming calls, you'll need at least one provider (each) for your incoming phone number (DID) and incoming calls as well as a provider for your outbound calls (terminations). We have a list of some of our favorites here, and there are many, many others. You basically have two choices with most providers. You can either pay as you go or sign up for an all-you-can-eat plan. Most of the latter plans also have caps on minutes so it's more akin to all-they-care-for-you-to-eat, and there are none of the latter plans for business service. In the U.S. market, the going rate for pay as you go service is about 1.5¢ per minute rounded to the tenth of a minute. The best deal on DIDs is from les.net. They charge $3.99 a month for a DID with unlimited, free incoming calls. WARNING: Before you sign up for any all-you-can-eat plan, do some reading about the service providers. Some of them are real scam artists with backbilling and all sorts of unconscionable restrictions. You need to be careful. Our cardinal rule in the VoIP Wild West is never, ever entrust your entire PBX to a single hosting provider. As Forrest Gump would say, "Stuff happens!" And life's too short to have dead telephones, even if it's a rarity.

Setting Up FreePBX to Make Your First Call. There are four components in FreePBX that need to be configured before you can place a call or receive one from outside your PBX in a Flash system. So here's FreePBX for Dummies in less than 50 words. You need to configure Trunks, Extensions, Outbound Routes, and Inbound Routes. Trunks are hosting provider specifications that get calls delivered to and transported from your PBX to the rest of the world. Extensions are internal numbers on your PBX that connect your PBX to telephone hardware or softphones. Inbound Routes specify what should be done with calls coming in on a Trunk. Outbound Routes specify what should be done with calls going out to a Trunk. Everything else is bells and whistles.

Trunks. When you sign up with most of the better ITHP's that support Asterisk, they will provide documentation on how to connect their service with your Asterisk system. If they have a trixbox tutorial, use that since it also uses FreePBX as the web front end to Asterisk. Here's an example from les.net. And here's the Vitelity support page although you will need to set up an account before you can access it. We also have covered the setups for a number of providers in previous articles. Just search the Nerd Vittles site for the name of the provider you wish to use. You'll also find many Trunk setups in the trixbox Trunk Forum. Once you find the setup for your provider, add it in FreePBX by going to Setup, Trunks, Add SIP Trunk. Our AxVoice setup (which is all entered in the Outgoing section with a label of axvoice) looks like this with a Registration String of yourusername:yourpassword@sip.axvoice.com:

allow=ulaw
authname=yourusername
canreinvite=no
context=all-incoming
defaultip=sip.axvoice.com
disallow=all
dtmfmode=inband
fromdomain=sip.axvoice.com
fromuser=yourusername
host=sip.axvoice.com
insecure=very
nat=yes
secret=yourpassword
type=friend
user=phone
username=yourusername

And our Vitelity Outbound Trunk looks like the following (labeled vitel-outbound) with no registration string:

allow=ulaw&gsm
canreinvite=no
context=from-pstn
disallow=all
fromuser=yourusername
host=outbound1.vitelity.net
secret=yourpassword
sendrpid=yes
trustrpid=yes
type=friend
username=yourusername

Extensions. Now let's set up a couple of Extensions to get you started. A good rule of thumb for systems with less than 50 extensions is to reserve the IP addresses from 192.x.x.201 to 192.x.x.250 for your phones. Then you can create extension numbers in FreePBX to match those IP addresses. This makes it easy to identify which phone on your system goes with which IP address and makes it easy for end-users to access the phone's GUI to add bells and whistles. To create extension 201 (don't start with 200), click Setup, Extensions, Generic SIP Device, Submit. Then fill in the following blanks leaving the defaults in the other fields for the time being.

User Extension ... 201
Display Name ... Home
Outbound CID ... [your 10-digit phone number if you have one; otherwise, leave blank]
Emergency CID ... [your 10-digit phone number for 911 ID if you have one; otherwise, leave blank]
Device Options
secret ... 1234
dtmfmode ... rfc2833
Voicemail & Directory ... Enabled
voicemail password ... 1234
email address ... yourname@yourdomain.com [if you want voicemail messages emailed to you]
pager email address ... yourname@yourdomain.com [if you want to be paged when voicemail messages arrive]
email attachment ... yes [if you want the voicemail message included in the email message]
play CID ... yes [if you want the CallerID played when you retrieve a message]
play envelope ... yes [if you want the date/time of the message played before the message is read to you]
delete Vmail ... yes [if you want the voicemail message deleted after it's emailed to you]
vm options ... callback=from-internal [to enable automatic callbacks by pressing 3,2 after playing a voicemail message]
vm context ... default

Now create several more extensions using the template above: 202, 203, 204, and 205 would be a good start. Keep the passwords simple. You'll need them whenever you configure your phone instruments.

Outbound Routes. The idea behind multiple outbound routes is to save money. Some providers are cheaper to some places than others. We're going to skip that tutorial today. You can search the site for lots of information on choosing providers. Assuming you have only one or two for starters, let's just set up a default outbound route for all your calls. Using your web browser, access FreePBX on your server and click Setup, Outbound Routes. Enter a route name of Everything. Enter the dial patterns for your outbound calls. In the U.S., you'd enter something like the following:

1NXXNXXXXXX
NXXNXXXXXX

Click on the Trunk Sequence pull-down and choose your providers in the order you'd like them to be used for outbound calls.Click Submit Changes and then save your changes. Note that a second choice in trunk sequence only gets used if the calls fail to go through using your first choice. You'll notice there's already a 9_outside route which we don't need. Click on it and then choose Delete Route 9_outside. Save your changes.

Inbound Routes. We're also going to abbreviate the inbound routes tutorial just to get you going quickly today. The idea here is that you can have multiple DIDs (phone numbers) that get routed to different extensions or ring groups or departments. For today, we recommend you first build a Ring Group with all of the extension numbers you have created. Once you've done that, choose Inbound Routes, leave all of the settings at their default values and move to the Set Destination section and choose your Ring Group as the destination. Now click Submit and save your changes. That will set up a default incoming route for your calls. As you add bells and whistles to your system, you can move the Default Route down the list of priorities so that it only catches calls that aren't processed with other inbound routing rules.

General Settings. Last, but not least, we need to enter an email address for you so that you are notified when new FreePBX updates are released. Scroll to the bottom of the General Settings screen after selecting it from the left panel. Plug in your email address, click Submit, and save your changes. Done!

Adding Plain Old Phones. Before your new PBX will be of much use, you're going to need something to make and receive calls, i.e. a telephone. For today, you've got several choices: a POTS phone, a softphone, or a SIP phone. Option #1 and the best home solution is to use a Plain Old Telephone or your favorite cordless phone set (with 8-10 extensions) if you purchase a little device known as a Sipura SPA-3102. It's under $70. Be sure you specify that you want an unlocked device, meaning it doesn't force you to use a particular service provider. This device also supports connection of your PBX to a standard office or home phone line as well as a telephone.

Downloading a Free Softphone. Unless you already have an IP phone, the easiest way to get started and make sure everything is working is to install an IP softphone. You can download a softphone for Windows, Mac, or Linux from CounterPath. Or download the pulver.Communicator or the snom 360 Softphone which is a replica of perhaps the best IP phone on the planet. Here's another great SIP/IAX softphone for all platforms that's great, too, and it requires no installation: Zoiper 2.0 (formerly IDEfisk). All are free! Just install and then configure with the IP address of your PBX in a Flash server. For username and password, use one of the extension numbers and passwords which you set up with freePBX. Once you make a few test calls, don't waste any more time. Buy a decent SIP telephone. We think the best value in the marketplace with excellent build quality and feature set (but probably not the best sound quality) is the $79 GrandStream GXP-2000. It has support for four lines, speaks CallerID numbers, has a lighted display, and can be configured for autoanswer with a great speakerphone. Our personal favorite and the phone that PBX in a Flash officially supports is the Aastra 57i or 57iCT which also includes cordless DECT phone. Do some reading before you buy. The Voxilla forums are a good place to start.

A Word About Ports. For the techies out there that want "the rest of the story" to properly configure firewalls, here's a list of the ports available and used by PBX in a Flash:

TCP 80 - HTTP
TCP 9080 - Duplicate HTTP
TCP 22 - SSH
TCP 9022 - Duplicate SSH
TCP 9001 - WebMin
UDP 10000-20000 - RTP
UDP 5004-5082 - SIP
UDP 4569 - IAX2
UDP 2727 - Media Gateway

Where To Go From Here. The PBX in a Flash script repository at pbxinaflash.org also has gotten a facelift. That should be your next stop because it is the home of all the goodies that make PBX in a Flash shine. Tom King, the ultimate scripting guru, manages that site. So check it often. And now that PBX in a Flash 1.2 is out the door, we've been chomping at the bit to get all of our Nerd Vittles Goodies ported over. Most of our original collection work flawlessly with Asterisk 1.4 including AsteriDex, Yahoo News Headlines, Weather by Airport Code, Weather by Zip Code, Worldwide Weather Forecasts, Telephone Reminders, MailCall for Asterisk, and TeleYapper. We have not yet completed testing with Asterisk 1.6... which has a text-to-speech impairment at the moment. Complete documentation for each application also is provided at the link above. And, if you still have a DBT-120 Bluetooth adapter, you'll be happy to learn that it works out-of-the-box with PBX in a Flash on your new Everex Green PC. Dust off our recent article on Proximity Detection, and you should be in business in under 10 minutes. Enjoy!


 

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...

  1. Join the following line to the original line of code whenever you encounter the ↩ character. []

Asterisk 1.6: Dinosaur or Ostrich… It Really Doesn’t Matter

In our last column, we lamented the fact that Asterisk® 1.6 development seemed to be on a collision course with the dinosaurs because of developer insistence on deprecating and removing commands from the application programming interface (API) in the name of technology enhancement. The problem this poses is that applications and dialplans written for previous versions of Asterisk no longer function even though the code is barely a year old. In the corporate and government sectors, this would mean major, costly (annual) rewrites of code just to keep a functioning phone system. And, as we noted, these organizations buy phone systems to last a decade so such a development strategy would all but rule out use of Asterisk in the Fortune 500, medical, and government sectors.

Today we want to share the Digium® response and address some of the new issues that have been raised. For those of you that haven't met him, Jared Smith, who co-authored the terrific Asterisk: The Future of Telephony books, now serves as Digium's Community Relations Manager. Jared sent us a thought-provoking response which you can read in its entirety here. For ease of understanding, we're going to quote a number of sections of Jared's response and address them below so that you get the full picture of how dangerous the Digium development approach is to the future of the Asterisk project. We've been concerned in the past with Fonality's decision to keep trixbox ce on the bleeding edge while reserving a more stable Asterisk product for paying customers. Now it appears Digium has decided to do much the same thing with the open source version of Asterisk. That's unfortunate for all of us that care about the future of the project.

Jared Smith: "I think we can both agree that the feature set is an important part of any PBX system. Or, as you put it, "It's the Feature Set, Stupid!" There are two major reasons for moving from Asterisk 1.4 to the upcoming Asterisk 1.6 release at all, and the first one is features. Asterisk 1.6 brings a lot of new features to the table over what was available in Asterisk 1.4 and Asterisk 1.2. (The other big change in Asterisk 1.6 is that a lot of its internal plumbing got re-worked, so that it should be more efficient, more stable, and better able to handle larger call volumes.) Unfortunately, your article doesn't differentiate between features of Asterisk and features that third-parties (yourself included) have bolted on to Asterisk. To use the same analogy that I gave when I met you in Charleston, we here at Digium want Asterisk to be the best engine in the world. Whether you make that engine into a Formula One race car or a big brown delivery truck is up to you -- we're simply building the best engine we can. Now, we've gone and built a newer version of the engine ("More horsepower! Higher torque! Faster zero-to-sixty speed!"), and suddenly everyone complains that the starter motor doesn't fit in the same place that it used to. I know it's not a perfect analogy, but hopefully you get my point... "

Uncle Ward: We obviously applaud enhancements which make Asterisk "more efficient, more stable, and better able to handle larger call volumes." It's the rest of the paragraph that highlights the fundamental problem with the current Asterisk development strategy. The point is that, for Asterisk to survive, the developers need to appreciate that they're not building a mousetrap in a vacuum. Asterisk without a dialplan is worthless. Asterisk without application code has little value particularly in vertical markets. To carry Jared's engine analogy one step further, the concern is not about Digium's repositioning the starter motor. It's about eliminating fundamental components that businesses rely upon to keep their communications engine running. It does little good to develop "the best engine in the world" if this year's version requires kerosene while last year's version ran on gasoline and next year's version requires hydrogen. Such changes force a complete reworking of the infrastructure that organizations rely upon to keep their cars and their phone systems functioning.

Jared Smith: "APIs change when major versions of the software are released. (APIs are Application Programming Interfaces -- think of them as building blocks inside of the Asterisk code that both Asterisk and third-party programs can use to do various things.) The problem is, when we make Asterisk better, we often have to change those APIs to do so... I'd challenge you to find any major project that provides source-level API compatibility as a *guarantee* between major release versions. (Look at Apache 2.0 - 2.2, PHP 4 - 5, MySQL 4 - 5, PostgreSQL 7 - 8. They all have the same thing -- Major changes almost always require API changes.) When the Asterisk APIs stop changing from major release to major release, then Asterisk *WILL* be as dead as the dinosaurs are. "

Uncle Ward: We defy anyone to explain why "making Asterisk better" required breaking every dialplan on the planet because some developer thought Set(TIMEOUT(digit)=timeout) was a code improvement in Asterisk 1.4 over DigitTimeout(timeout). No one wants to stand in the way of progress. But moving forward is quite different than throwing the baby out with the bath water. Supporting both syntaxes would have required one extra line of code in the API. In the alternative, Digium could have released a source code translation application which would automatically convert existing code to the new syntax. This almost always has been done with major changes in programming languages. We would hasten to add that most of the developer-inspired changes with which we have been concerned have little or nothing to do with making Asterisk a "better engine." It's just a different engine. And therein lies the problem!

Jared Smith: "Luckily, Asterisk is an open-source project, which means that when Asterisk does evolve, that the changes aren't made in secret. Any third-party developer who wants to make sure his code remains compatible with the latest version of Asterisk can do so at any time. He doesn't have to wait until 1.6.0 is released to find out that his code will have to be changed to fit the new APIs. The Asterisk code is always available to test, play with, qualify against, etc. so that the developer can update their code to be compatible, so that when the time comes that real users want to use it, their applications will be ready."

Uncle Ward: The concern here isn't that third-party developers can't make changes to accommodate future Asterisk API changes. The problem is that businesses that stake their livelihood on a phone system that is Asterisk-based expect it to keep working year after year after year. Third-party developers come and go. So, if a company purchases an Asterisk-based system which includes fax and text-to-speech telephony support, those companies have a right to expect that their applications will work next year with the currently supported version of Asterisk. Jared's response sent me looking for the image to accompany this week's article: an ostrich burying his head in the sand. Third party developers move on or die, Jared. You can't pretend that folks never used their code because you're too focused on future enhancements to your race car engine to worry about preserving the necessary infrastructure to support applications that already work. As we put it last week, "You break it, you fix it. I break it, I fix it." That's a really simple design concept that should be fundamental to any API development changes. This in no way impedes the design goal of "making things better." Just don't make other things worse in the process.

Jared Smith: "The next point I'd like to address is that of responsibility. Your article somehow assumes that it's the responsibility of the Asterisk developers to somehow know about all these third-party apps, and make sure they never break due to API changes. I can see three flaws with that argument -- first of all, there's no way the Asterisk developers could possibly know of every third-party application, it's state of affairs, and so forth... The second flaw is this -- even assuming for a moment that we could keep track of all the third-party apps and try to keep them up to date (which we both know isn't possible), licensing concerns would keep the Digium-paid Asterisk developers from doing so... The third flaw to that argument is the point I made earlier... if Asterisk *were* to guarantee source-code API compatibility between major releases, there's no way possible that Asterisk could continue to grow, evolve, and adapt to the changing telephony market. "

Uncle Ward: I'm reminded of the Venus and Mars book about the differences in perspective between men and women. Are you really saying that Asterisk developers had no idea that folks were using dialplans and text-to-speech applications with Asterisk after Digium just worked with Cepstral to produce an Allison voice?? Come on, Jared. This isn't about whether it is Digium's responsibility to fix third-party developer code. This is about whether corporations and government organizations are going to invest in a telephony system when the business philosophy of the engine manufacturer is that they could care less whether they break existing telephony applications with each new product release. As I read Jared's response, Asterisk developers can't and won't be responsible for making sure they don't break existing applications and dialplan code, and Digium won't do anything to migrate existing code to new platforms. I'm not sure I understand how development of a piece of migration application code requires a knowledge of every third-party application in the universe. Presumably, the Asterisk development team does know when it changes the syntax of some command in the existing API. Why then would it be so difficult to provide another application that translated the "old code" into the "new syntax?" That doesn't require that any third-party apps be reviewed. And it doesn't stymie future development. Just provide the tool to fix stuff that you broke!

Jared Smith: "Last but not least, let's talk directly about your bug report. In it, you claim that 'Lack of native support for either Flite or Cepstral TTS breaks thousands of existing text-to-speech Asterisk applications.' Asterisk has never had native support for either Cepstral or Flite for text-to-speech, so I'm not sure how not having it in Asterisk 1.6 breaks anything. I'm afraid that if I were to follow your logic to its logical conclusion, it would be better to write that as 'Since the developer that wrote app_swift won't update the code for Asterisk 1.6, it's Digium's responsibility to do so.' Again, I've got to point out that Flite and app_swift are totally outside the control of the Asterisk development team."

Uncle Ward: Wrong again. What the Asterisk developers can control is making sure that, when a change is made to the API, they either support the new and old syntax or, in the alternative, that the developers provide a separate tool to convert existing source code to the newly-created syntax. That's what any responsible developer would do. This isn't a problem with a third-party application developer refusing to update his or her code. Many of these developers are no longer available or reachable. So it behooves the proponent of changes that impact the operation of existing telephony systems to provide a migration vehicle to the new platform. It's as simple as that. Give it some more thought, Jared. There's a lot more than either of us may appreciate riding on the outcome of our discussion.


 

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...

The Digium Dead End: Will Asterisk Be The Next Dinosaur

We’ve patiently waited until after April Fool’s Day to publish this column, but we’re having second thoughts. It may have been more fitting yesterday. One of the problems with laying track in front of a steaming locomotive is that someone still needs to watch where the train is headed. So it is with Asterisk®. And 1.6 has all the ingredients of a train wreck waiting to happen. To fully appreciate the reality of the situation, one need look no further than the business model of the Ciscos, Avayas, and the Nortels. Simply put, no customer cares what version of a phone system they are buying. Or, to dumb it down to a Clintonism: "It’s the Feature Set, Stupid!" When the features stop working, the customers start walking. It’s as simple as that.

When we began the PBX in a Flash project last November, our emphasis was radically different than some of the other Asterisk aggregations. First and foremost, we wanted a product that was stable. Of equal importance was our own Big Easy: easy to use, easy to enhance, and easy to upgrade. We didn’t want users or VARs having to reinvent the wheel each time a security patch or new enhancement was released. 40,000 downloads in just over four months tells me we got it just about right. To look at it from the customer side, no business (that wants to stay in business) will tolerate a phone system that is routinely out of service for upgrades much less one that takes away features that the business depends upon. Whether it’s Caller ID, or Text-to-Speech, or Screen Pops, or Conferencing, or Phone Blasting, or even a Call Center really doesn’t matter. It does no good to tell a customer that they lost critical functionality but now they have the latest version of X. You can add your own customer expletive here if you’ve ever tried this approach in the real world.

Which brings us back to Asterisk 1.6. In the good old days when there wasn’t much of a feature set and when no business would stake their livelihood on Asterisk, it really didn’t much matter when a new version of Asterisk was released. To put it charitably, things could only get better. Well, things have changed. Businesses now rely upon Asterisk. So the dynamics are quite different. It’s no longer acceptable to trash big chunks of code without making certain that you didn’t break something that was already working. It’s no longer acceptable to invent new verbs in the programming language while deleting commands that used to work. We defy you to find a link to any document that explains the transition from Asterisk 1.2 verbs to Asterisk 1.4 produced by the developers of the product. Asterisk 1.6 continues the programming carnage while adding some bells and whistles of its own: for example, an entirely new and different Asterisk Manager. And the scorecard: Screen Pops, Dead. Phone Blasting, Dead. Flite Text-to-Speech, Dead. Cepstral, Dead. Speech-to-Text, Dead. To show you the mentality of the programmers that think all of this is a good idea, here’s the response to our complaint that Asterisk 1.6 broke virtually all existing text-to-speech applications… again!

    Summary: 0012348: Neither Flite nor Cepstral TTS works with Asterisk 1.6

    Description: Lack of native support for either Flite or Cepstral TTS breaks thousands of existing text-to-speech Asterisk applications.

    Response: This is clearly code that is not in Asterisk. Many of us cannot even look at the code, unless it has been disclaimed. If the original developers are not willing/able to update their code, then you are going to either have to find somebody who will do it for free, or offer a bounty for somebody to do it. This is most certainly not the place to be requesting this. In the future, before posting any bug reports, please read the bug guidelines as linked on the main page of bugs.digium.com.

Wrong, wrong, wrong. That’s the type of attitude that will sound the death knell for Asterisk. Here’s the tattoo that should be stamped on every programmer’s foreskin forehead: You Break It, You Fix It. I Break It, I Fix It. Hopefully Mark & Co. will come to their senses before it’s too late.

Click here for Chapter 2.


Footnote: Since releasing this article earlier today, we’ve gotten a response from Cepstral Support. They also had contacted Digium® for help with this. If you loved the original Digium response to the bug report, you’ll really enjoy this one:

    "Thank you for your interest in Cepstral Voices. In my discussions with Digium they made three comments:

    1) That releasing an "ISO" of Asterisk may break the GPL2 (they were more certain than "may"). I would check with Digium on this. (WM: We already have sent the correspondence and can’t wait to hear more!)

    2) Asterisk V. 1.6 is in Beta and that they take the typical corporate stand on Beta. They know of incompatibilities, but since it is in Beta – they are working through these.

    3) Cepstral and Digium both recommend that you contact the people that wrote the app_swift layer. In the future there may be some app_swift / app_cepstral / res_cepstral that is "official" – but right now it is a bit pot-luck in support."


 

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…

Introducing TeleYapper 4.0: The Free, Asterisk 1.4 Message Broadcasting System

Today we're pleased to introduce TeleYapper 4.0, an updated, Asterisk® 1.4-compatible version of our telephone broadcasting service (aka phone blasting software). For those with text-to-speech capabilities on your PBX in the form of either Flite or Cepstral, today's addition adds support for individualized, text-based messages to everyone in a group distribution list. And, for those with multiple outbound trunks, TeleYapper 4.0 supports simultaneous calls using multiple trunks. Version 4 works with PBX in a Flash, of course. And it should work well with trixbox 2.x and later versions of Asterisk@Home. If you're using an earlier version of Asterisk@Home, see our previous versions and tutorial.

For those that have never used TeleYapper, let us give you a quick summary of the product. It's an automated message broadcasting service commonly known as a call blasting or phone blasting system. In addition to loads of creepy uses, phone blasting has a legitimate purpose. TeleYapper is licensed for the following uses: to send prerecorded phone messages for neighborhood association announcements, school closings, tornado alerts, little league practices, fund raisers, municipal government reminders, and for just about any other non-commercial purpose. We'll have more to say about the licensing restrictions on this product in a minute.

Everything you'll need to get TeleYapper 4.0 dialing away is in this article. And functionally, TeleYapper still works identically to prior versions with a few embellishments. For those new to TeleYapper, here's how. You create a recorded message using Asterisk. Then you create a list of phone numbers to call in a MySQL database using a tool such as phpMyAdmin which is bundled with PBX in a Flash and some other Asterisk distributions. Once your distribution list is set up, you place a phone call either to kick off TeleYapper or to redial calls that failed the first time around. The software will dutifully swing into action and call qualifying phone numbers from any of ten calling categories that you specify when you set up your database of message recipients. TeleYapper then will deliver the message you've recorded. It works much like call-em-all.com and numerous other telephone broadcasting services with one important difference: TeleYapper is FREE! So, instead of paying 15¢ a call or $35 to $100 a month for a commercial service or spending thousands of dollars for a commercial dialer, now you can do it yourself using TeleYapper and your (also free) PBX in a Flash system. Look at the top of this page (just below the Nerd Vittles header) for links to Windows, Mac, and Linux versions of PBX in a Flash that are perfectly suited for use with TeleYapper. Today we'll actually get TeleYapper making calls and emailing you the results of those calls. Don't be intimidated by this technology. You can complete this project in under 5 minutes. If you're using one of our PBX in a Flash systems, then installation of TeleYapper 4.0 is a one-minute install. Either way we've done most of the hard work for you. All you'll need to do is create your call distribution groups.

Legalese. For those that are used to buying flawless software such as Microsoft Windows or Microsoft Office, let's be sure we're all on the same page up front. First, you're not buying this software. It's FREE! And, yes, sometimes you get what you pay for. Second, don't assume today's version is error-free. It's probably not. But we try pretty hard to write reliable code. Third, by downloading or using this software, you are agreeing to assume all risks associated with use of the software. NO WARRANTIES EXPRESS OR IMPLIED INCLUDING ITS FITNESS FOR USE OR MERCHANTABILITY ARE PROVIDED WITH THIS SOFTWARE. And, finally, read or reread our previous article concerning Do Not Call statutes in your jurisdiction. Make sure you are in compliance before placing any calls. Failure to heed this advice may subject you to serious criminal and civil penalties. If any of this gives you heartburn, exercise your constitutional right to not use the software.

Overview. TeleYapper 4.0 also provides a good framework for anyone wanting to write Asterisk AGI scripts using PHP. The code is well-documented to demonstrate how to pass variables to an AGI script from your dialplan and how to retrieve variables from an Asterisk AGI script into your dialplan. We needed this for TeleYapper because we're using a phone call to an Interactive Voice Response (IVR) session embedded in the dialplan to begin the calling process. We use the IVR session not only to determine which group of callees to call but also to give the caller the option of placing a call to everyone in the group or just those to whom the initial call was unsuccessful. After the caller hangs up, the results are passed to the teleyapper.php application to do the heavy lifting. The PHP program takes advantage of an AGI script's ability to actually set dialplan code in motion once a call is answered. In order to log calls and track which ones are successful, we have to pass variables into that dialplan code and then execute another PHP script when the call is completed. Stated another way, every call requires two round-trips from the Asterisk dialplan to PHP/AGI scripts. So, if you can't figure out how to pass variables back and forth using this application, you probably should consider another line of work. For those that just want to use the TeleYapper application and not learn much of anything about programming, you're welcome to do that subject to the license agreement which follows. We hope you'll put it to good use for the betterment of a school, an intramural sports program, or a neighborhood or community in which you happen to live.

Creative Commons LicenseLicensing. We are retaining ownership of this software as well as the copyright. It is licensed for use under the terms of the Creative Commons Attribution Non-Commercial license. A Plain English summary is available here. We've done this primarily to do our part to stamp out the telemarketing creeps of the world. Those wishing to use TeleYapper in a commercial environment must first request and purchase a license outlining your proposed terms of use. We will promptly respond with a yay or nay. Telemarketers need not apply!

TeleYapper in a Nutshell. Before we get to the code, let's briefly cover how this message broadcasting system works. When you dial M-S-G (extension 674) from a phone connected to your PBX, TeleYapper will answer and prompt you for your password. Once you correctly enter the password, an interactive voice response (IVR) system will swing into action and give you several choices. That's what the [yapper] context handles. Pressing 1 lets you listen to your prerecorded TeleYapper message (if you have one). You don't yet so don't press 1. Pressing 2 lets you record a new TeleYapper message. This is handled by the [yapper2] context. Do this first and record something ... anything. You can rerecord a new message at any time by choosing option 2 again. Pressing 3 lets you kick off a TeleYapper dialing spree. It's handled by the [yapper3] context. Don't do this until we add and you populate your new database below, or you'll get smoke. When you choose option 3 to initiate a TeleYapper calling session, the system will first prompt you for a group option number to use. This is managed by the [yapper-options] context. Simply stated, when you build your database of callees for TeleYapper, you can specify a one-digit group number for each entry in the file. Then, when you begin a calling session, you can narrow down the calling group by telling TeleYapper which group of callees to call. If you want a callee to be in more than one group, you simply enter that callee into the database multiple times with different group numbers. If you want everyone in the same group, then enter 0 for every person in your database.

Once you specify the group number during your TeleYapper session, the system will actually look up and report back how many messages will be delivered to the callee group you've chosen. Allison will say something like this assuming there were 146 calls to be placed: "The number I have is one hundred and forty six messages." This will give you the count of qualifying records in the database and the option of proceeding with the calls, canceling the transaction, or just redialing the numbers of the calls that failed to this group on the previous pass through the database.

TeleYapper's Calling Process. For those that like lists, it may help to visualize how all the TeleYapper code fits together by laying out the actual program steps in a typical call:

  • Caller with TeleYapper password places call to M-S-G (extension 674) to activate a TeleYapper session.
  • Asterisk answers the call, provides IVR menu choices: playback a message, record a new message, or place a call.
  • If caller chooses to place a call, IVR prompts for Group number to call (0-9).
  • Asterisk passes the Group number to MySQL (checkgroup.php) to look up the number of callees in the chosen Group.
  • Group count is passed back to Asterisk which uses Allison to tell the caller how many callees are in the chosen Group.
  • Caller has option of placing the call, hanging up, or choosing to redial previously unsuccessful calls in the chosen Group again.
  • If caller chooses to place a new call, Asterisk thanks the caller, hangs up, and then passes control to teleyapper.php to handle placing the calls.
  • TeleYapper time stamps dialing scripts two minutes apart for each call beginning two minutes after the initiating request. Scripts are placed in the Asterisk outgoing calls queue.
  • TeleYapper initializes the date/time and status fields for each record in the Group to be called. These are only filled in when a call is then answered.
  • If you've enabled logging in teleyapper.php, then the log is generated after all of the call setups have been completed.
  • If you've enabled emailing of the teleyapper.php log, then the log is emailed to your email address at the same time.
  • Asterisk checks its call queue each minute and places each call at the appointed time. Then it waits for the callee to answer.
  • If no one answers the call, nothing is posted to the MySQL database regarding call completion. That's how we identify unsuccessful calls.
  • If the call is answered, the callee is advised to hold for an important message. If the msg field for this callee is blank, then the prerecorded message is played to the caller.
  • If the msg field has a message in it, then either Flite or Cepstral is used to read the custom message to the callee.
  • Callee is then prompted to press 1 to acknowledge the call and hang up, press 2 to replay the message, or press 3 to remove the callee from the database.
  • If callee presses 1, Allison says goodbye and Asterisk hangs up the call. MySQL database will show date/time of call with status of OK.
  • If callee presses 2, your message is replayed, and then the call is disconnected. MySQL database will show date/time of call with ReplayedMsg as status.
  • If callee presses 3, log will reflect that caller requested blacklisting. MySQL will actually DELETE this person from your database. It's the LAW!
  • If callee makes no choice, Asterisk will replay your message, then hang up, and record the date/time of call with status of AnsMachine.
  • If you've enabled logging in teleyapper2.php, then the individual call log is generated and appended to the main log file after each call has been placed.
  • If you've enabled emailing in teleyapper2.php, then the call log is emailed to your email address after EACH call has been placed.

The TeleYapper code not only handles the actual dialing of the callees you've entered in your MySQL database (teleyapper.php), it also plays your message when a callee answers (dialplan contexts), and documents what happened during the calls (teleyapper2.php). Call progress is documented in two ways. First, when a call is completed, TeleYapper will log the date and time of the call as well as a best guess of what happened during the call in your MySQL database. So browsing entries in your TeleYapper database will always show the date, time, and status of the last completed call to each callee. We'll build a web interface for this some day.

When you install the TeleYapper PHP components, there are some configuration options which will also let you create a detailed log of what happened during the TeleYapper calls. If you have email working reliably on your Asterisk system, you also can enter your email address and tell TeleYapper to email you every log that is produced. There are log entries for the initial call setup (handled by teleyapper.php) and for the placement of the individual calls (handled by teleyapper2.php). Finally, you have the option of creating a new log with each series of calls that are placed (the default setting), or you can configure TeleYapper to keep adding to the end of the initial log. In the latter case, it's up to you to erase the log before it fills up your disk. Individual call entries, if logged, will be appended to the main TeleYapper call setup log (/var/log/asterisk/teleyapper.txt).

Installing TeleYapper 4.0 The real beauty of PBX in a Flash as an Asterisk platform is demonstrated by the ease with which you can install new applications such as this one. The drill is very simple. You download an install script, make it executable, and run it. Less than a minute later, the TeleYapper install is done. For those that want to take advantage of the new text-to-speech option in TeleYapper to deliver customized messages to callees, we've included an option in the installer that preconfigures TeleYapper for either Flite or Cepstral so you don't have to touch your dialplan. This can be changed later by replacing Flite with Swift or vice versa in the [broadcast] and [broadcast2] contexts in your extensions_custom.conf dialplan code. Here are the commands to execute to install TeleYapper after logging into your PBX in a Flash system as root:

cd /root
wget http://bestof.nerdvittles.com/applications/teleyapper4/teleyapper.pbx
chmod +x teleyapper.pbx
./teleyapper.pbx

Adding Entries to the TeleYapper Database. We use the MySQL database management system to manage the list of callees for TeleYapper to dial. It can handle a database of almost any size and generally stands up well in performance comparisons with Oracle. So you're covered on the database front.

The install script created the MySQL database to support TeleYapper. The easiest way to work with MySQL databases is to use the phpMyAdmin which is accessible through the Tools tab in FreePBX on PBX in a Flash systems. You'll need to login as maint with your maint password to access phpMyAdmin. After phpMyAdmin loads, click on the teleyapper database in the left column. Then click the teleyapper.callees table entry in the left column to open the file. Now click the Insert tab at the top of the right column to add entries to the table. You only need to add information for the name, phonenum, and group fields in the corresponding values column. The id, lastokcall, and lastcall fields should be left as is. The id field gets calculated automatically. The lastokcall will record the time and date of the last successful call using TeleYapper. And the lastcall field identifies what happened during the last call to this person, e.g. ok means the call was completed successfully, no answer means no one answered the call, or answering machine means an answering machine took the call. Only fill in the msg field if you want to deliver a customized message (rather than your prerecorded message) to this callee. And, remember, this functionality only works if you have Flite or Cepstral installed and working on your system. Flite works by default on all PBX in a Flash systems. Cepstral you have to pay for. See our Cepstral article if you'd prefer to use Cepstral with Allison's voice for this and other Nerd Vittles text-to-speech applications.

Where were we? You can add up to two MySQL records at a time with phpMyAdmin and, by clicking the Insert Another New Row button, you will be returned to this data entry screen after you save your entries by clicking the Go button. The name field allows you to quickly review entries you've made. It won't be used when making TeleYapper calls. The phonenum field is the important one. This is the exact dial string required to place a call on your Asterisk system to this callee using whatever VoIP or PSTN outbound trunk you plan to use with TeleYapper. For example, if your preferred provider requires 11-digit phone numbers with a 1, area code, and number, then that's the way the numbers should be entered into the TeleYapper database. The group field has already been discussed. Just enter a number between 0 and 9 to identify the group with whom this individual should be associated. Finally, after adding records to the table, you can click the Browse tab to review your entries. And, while Browsing, you can click the Pencil icon beside any record entry to edit it. Clicking the red X icon beside a record entry deletes the record. If, for some reason, you wish to delete ALL the records in the file, click the Empty tab at the top of the right column. Under no circumstances should you click on the Drop tab as this removes not only the table's contents but also the table structure itself. In short, you'd have to recreate the database table again.

Answering the Incoming Call. A simple addition to your dialplan is used to force Asterisk to answer calls to M-S-G (extension 674) and pass them to the TeleYapper contexts for processing. The following code has been inserted into the [from-internal-custom] context near the top of extensions_custom.conf. Be sure to change the 1234 password below to something secure for your system since this will be used to gain access to your TeleYapper system!

exten => 674,1,Answer ; dial MSG on any extension to manage your TeleYapper system
exten => 674,2,Wait(1)
exten => 674,3,Authenticate(1234)
exten => 674,4,Goto(yapper,s,1)

Once you change the password, save your changes and reload the Asterisk dialplan.

If you're using FreePBX, we recommend you also make the following addition to your FreePBX configuration. Log into FreePBX with a web browser. Then choose Setup, Misc Destination. Add a new entry for TeleYapper with 674 as the Dial entry. Save your change and reload the dialplan when prompted to do so.

Configuring checkgroup.php AGI Script. The checkgroup.php script was installed in your /var/lib/asterisk/agi-bin directory as part of the installation. This script includes a debug log. The default settings are to create a new log file (/var/log/asterisk/telecheck.txt) each time the script is executed. This doesn't take up much room and is always there for you to read if something comes unglued: cat /var/log/asterisk/telecheck.txt. There are some other options. You can turn off the log file entirely ($debug=0). You can choose not to erase the previous log file each time the script is run ($newlogeachdebug=0) in which case the file continues to grow until your hard disk fills up. And you can have the log file emailed to you each time the script is executed ($emaildebuglog=1) by adding your email address ($email=youremailaddress). The last option obviously assumes you have followed our previous tutorial and gotten outbound email working reliably on your system. The functions are controlled by the following lines at the top of the checkgroup.php file. 1 means yes, and 0 means no. Just edit the file carefully: nano -w checkgroup.php. And save your changes when you're finished: Ctrl-X, Y, then press Enter.

$debug = 1;
$newlogeachdebug = 1;
$emaildebuglog = 0;
$email = "yourname@yourdomain" ;

Configuring teleyapper.php AGI Script. The teleyapper.php script has a number of configuration options including a debug log. Edit the file carefully while positioned in the /var/lib/asterisk/agi-bin directory: nano -w teleyapper.php. And save your changes when you're finished: Ctrl-X, Y, then press Enter. All of the options are shown below.

$maxlines=1 ;
$maxretries=1 ;
$retrytime=60 ;
$waittime=60 ;
$callspread=2 ;
$debug = 1;
$newlogeachdebug = 1;
$emaildebuglog = 0;
$email = "yourname@yourdomain" ;
$trunk = "local" ;
$callerid = chr(34) . "TeleYapper" . chr(34) . " <6781234567>" ;

The first line lets you set the number of simultaneous calls which can be placed. Be sure you have sufficient outbound trunks to support the number you insert and be sure to use the "local" setting for $trunk unless you know what you're doing. The callspread variable determines the spacing of calls (or groups of calls if you have multiple outbound trunks) to your various callees. The default has been changed from one minute to two minutes based upon extensive testing with large numbers of calls. This means the call to the second callee (or group of callees if you have specified $maxlines > 1) begins two minutes after the first call starts. Because a broadcast message is usually more than about 20 seconds long, we have found the 2 minute setting to be better since it allows sufficient time to complete the first call before the next one begins. Otherwise, calls will start failing if you only have a single outbound trunk. If you're going to be placing hundreds of calls, be sure to read our previous article which covers a real-world example using a 700-call database.

The debug flags in this file are set the same way as in the checkgroup.php script above: 1 means yes, and 0 means no. The default settings are to create a new log file (/var/log/asterisk/teleyapper.txt) each time the script is executed. This doesn't take up much room and is always there for you to read if something comes unglued: cat /var/log/asterisk/teleyapper.txt. There are some other options. You can turn off the log file entirely ($debug=0). You can choose not to erase the previous log file each time the script is run ($newlogeachdebug=0) in which case the file continues to grow until your hard disk fills up. And you can have the log file emailed to you each time the script is executed ($emaildebuglog=1) by also adding your email address ($email=youremailaddress).

Two settings you will need to review and perhaps adjust to get calls to complete properly are the trunk and callerid variables. If you wish to use a specific trunk in your dialplan for outbound calls, the syntax for the outbound trunk is the same as it is in your dialplan, e.g. sip/telasip-gw or iax2/voxee. Look at the OUT settings in your /etc/asterisk/extensions_additional.conf file if you're not sure. At the request of a number of users, we've now added a new option which allows all outbound TeleYapper calls to be placed using the default dialplan rules on your server. The advantage of this approach is that different VoIP providers can be used automatically for different types of calls in your TeleYapper database. To use your default dial rules, set the trunk in all lowercase letters to local and TeleYapper will handle the rest of the setup for you.

The callerid variable should be set to the callerid number of your outbound trunk unless your service provider allows callerid spoofing (some don't!). Don't delete the variable! Just leave the default value.

Finally keep in mind that the format of the numbers to be dialed in your database must exactly match the syntax your trunk provider is expecting to see unless you're using your default dialplan rules. Otherwise, all of the outbound calls will fail. For example, if your provider requires that calls begin with a 1 followed by a 3-digit area code and 7-digit number, then that's the way the numbers must be entered in your TeleYapper database. Do NOT use hyphens or other punctuation in the phone number entries!

Configuring teleyapper2.php AGI Script. The only configuration options in the teleyapper2.php script are for the debug log on individual calls that are placed. We recommend you leave the existing settings, or you'll get a new email every time each individual call is placed by TeleYapper. You can edit the file while positioned in the correct directory: nano -w teleyapper2.php. And save your changes when you're finished: Ctrl-X, Y, then press Enter. All of the options are shown below.

$debug = 1;
$emaildebuglog = 0;
$email = "yourname@yourdomain" ;

The debug flags in this file are set the same way as in the teleyapper.php script above: 1 means yes, and 0 means no. The default settings are to append individual call information onto the teleyapper.txt log file (/var/log/asterisk/teleyapper.txt) each time a new call is placed. Unless you're planning to call hundreds of thousands of people, this doesn't take up much room and is there for you when something comes unglued. The other options are as follows. You can turn off the individual call logging entirely ($debug=0). And you can have the entire teleyapper.txt log file emailed to you each time a call is placed ($emaildebuglog=1) by also adding your email address ($email=youremailaddress). For your initial test calls, this may be desirable just so you can see what's going on ... if you're too lazy to read the log.

Changing the Initial Greeting. When TeleYapper places calls, it initially announces the call before playing your prerecorded message or customized text-to-speech messages. The default greeting is "Hi. Please hold a moment for an important message." This may not be appropriate for what you plan to do so we've added several more from which you can choose. The greetings all are stored in /var/lib/asterisk/sounds/custom. The one that actually plays is nv-yapintro.wav. So just choose the one you like and copy it over as nv-yapintro.wav. The choices include the following:

  • nv-yapintro-reminder.wav - Please hold a moment for an important reminder.
  • nv-yapintro-pubsvcmessage.wav - Please hold a moment for an important public service message.
  • nv-yapintro-safety.wav - Please hold a moment for an important safety alert.
  • nv-yapintro-school.wav - Please hold a moment for an important message from your school.
  • nv-yapintro-team.wav - Please hold a moment for an important message from your team.
  • nv-yapintro-message.wav - Please hold a moment for an important message.

Taking TeleYapper for a Spin. Once you restart Asterisk (amportal restart), you should have a TeleYapper System that works. First, start up the Asterisk Command Line Interface (CLI) by typing asterisk -rvvvvv from the command prompt on your system after you've logged in as root. The CLI now will track the progress of your TeleYapper sessions.

Using phpMyAdmin, add your cellphone number to your TeleYapper database and specify Group 0 for the entry. Now dial 674 and provide your password, record a message (Option #2), and then place a call (Option #3) to Group 0. Press 1 to kick off the TeleYapper calling spree. Check your CLI and TeleYapper logs if your cellphone doesn't ring in about two minutes.

Real-World Test of TeleYapper. Be sure to check out our previous article on TeleYapper for a real-world example dialing 700+ neighbors with information about a rezoning meeting.

From Our Legal Department, moi: The TeleYapper product name (our feeble attempt at humor through parody) has absolutely no affiliation with TeleZapper, the terrific hardware product designed to keep telemarketers from bugging the hell out of you while you're eating your dinner. We confess that our sense of humor got the better of us in coming up with the name for this non-commercial (aka "free") utility designed primarily as an educational vehicle to assist the Asterisk community in recognizing the almost limitless potential of AGI and PHP programming. Our parody seeks to amuse, not to confuse. Our telephony software Yaps. Their telephony hardware Zaps. Other than a telephone line, there is no product similarity as the two conjoined words make clear. And, yes, that is the whole point! The products are opposites, not identical nor even similar. One letter makes all the difference in Night and Light. So it is with Yapper and Zapper. Brand confusion in trademark law arises from synonyms, not antonyms. It is systems like what we're writing about today that TeleZapper is designed to protect against. And it does that very well. In fact, we use TeleZapper hardware in our own home and have for many years. The only problem, of course, is when that tornado comes rolling down the neighbor's street, it would have been nice to get the automated phone call from TeleYapper at the neighborhood headquarters. But, who cares, right? It's only your house. Class dismissed.


64-bit PBX in a Flash IS Ready for Testing. For those of you with 64-bit systems, you really need to try our new 64-bit version of PBX in a Flash. Some are reporting more than a 200% performance improvement over the 32-bit version. If you'd like to try out the 64-bit release, contact Joe Roper through the PBX in a Flash Web Site for a link to the download. The following processors reportedly support 64-bit code:

Intel NetBurst
Intel Xeon (some models since "Nocona")
Intel Celeron D (some models since "Prescott")
Intel Pentium 4 (some models since "Prescott")
Intel Pentium D
Intel Pentium Extreme Edition
Intel Core microarchitecture
Intel Xeon (all models since "Woodcrest")
Intel Core 2 (Including Mobile processors since "Merom")
Intel Pentium Dual Core (E2140, E2160, E2180, T2310, T2330 and T2370)
Intel Celeron (Celeron 4x0; Celeron M 5xx)
AMD Athlon 64
AMD Athlon 64 X2
AMD Athlon 64 FX
AMD Opteron
AMD Turion 64
AMD Turion 64 X2
AMD Sempron ("Palermo" E6 stepping and all "Manila" models)
AMD Phenom

Coming Soon for Bleeding Edgers. If you really like living on the edge, there will be an Asterisk 1.6 version of PBX in a Flash shortly for experimentation purposes only. I spoke with Tom King by phone using a functioning 1.6 build today, and everything worked swimmingly including most of the FreePBX 2.4 functionality. The design is the same as the current PBX in a Flash system with the latest Asterisk 1.6 beta code, of course, and all the goodies needed to support it in the familiar LAMP environment consisting of Linux, Apache, MySQL, and PHP. Stay close to the PBX in a Flash Forum for the 1.6 ISO announcement!

Do You Get It Yet? With the roll-out of these new ISOs, even the slow-learners should be starting to see why a carefully designed, source-based LAMP install of Asterisk is so compelling. Until now, not a single PBX in a Flash user ever has had to reinstall PBX in a Flash from scratch. A few button clicks is all it takes to transform the original PBX in a Flash ISO into a current, virtually bug-free system with the latest and greatest versions of Asterisk, FreePBX, and CentOS. And issues raised on our forums are addressed in minutes, not weeks or months. Pretty neat if we do say so. Give PBX in a Flash a try. You'll be glad you switched. 40,000+ downloads in four months and four days kinda says it all.

Munin Comes to PBX in a Flash. With special thanks to Andrew Gillis for his pioneering work in porting munin to the Asterisk LAMP environment, we are pleased to announce that a one-minute install of munin is now available for PBX in a Flash. For those unfamiliar with munin, it is a fantasic, web-based server monitoring and management tool that now has customized add-ons to support Asterisk.everything. You can read up on munin and download the installation script from the PBX in a Flash Forum.

Aastra 2.2 Firmware Update. For those heeding our advice and using the World's Best Asterisk Phone, the Aastra 57i, there's a terrific firmware update that's 100% compatible with the existing Nerd Vittles Aastra phone design. This update adds dozens of new features and fixes the one concern of losing the transfer and forward buttons when a second incoming call arrives. The new features include:

  • Group Paging via RTP Multicast
  • Call Forward and DND for each account
  • One-touch Call Transfer to BLF Extensions and SpeedDials
  • Intercom and AutoAnswer Enhancements
  • and many, many more...

Just download the update from here, copy the unzipped 57i.st file into /tftpboot on your PBX in a Flash server, and restart your phones. It's as simple as that.

Conversational Linux for Windows Users. Last, but not least, Joe Roper, one of the key players on the PBX in a Flash Development Team, has a great Linux for Newbies tutorial that should be available in the next couple weeks. If you're a Windows user and want to learn all of the Linux basics in a simple, Plain-English tutorial, this is the document for you. The document will be made available on pbxinaflash.com and pbxinaflash.net at no cost although Joe does accept consultancy work when you have a project that demands a bit more expertise. A portion of that income is generously plowed back into the PBX in a Flash development project. Stay tuned!


 

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...

SIP Proxies Make Asterisk Shine and Save You Money

We're going to take a break today and have a little fun by showing how to quickly connect to any other Asterisk® system to make free calls forever! It's been a long time since we discussed SIP proxies and some newer members of the Asterisk community may not appreciate what a cost-saving feature SIP proxies can be in your Asterisk system particularly if you, or your friends, or your business associates have other Asterisk systems in far away places. And, for the experts, yes, we're going to talk about Dundi soon. But, for today, we'll add a little FreePBX secret that wasn't even covered in the excellent FreePBX Training Seminar last week.

To get started, we're going to use dyndns.org as our dynamic SIP proxy server, i.e. to translate fully-qualified domain names (FQDNs) into IP addresses for Asterisk servers. In short, it works much like a DNS server. You type in a domain name, and the SIP proxy server looks up the IP address for you. Why does this all matter you might be asking? Well, when you have access to a "phone number" or account on a remote Asterisk server, you can reach that number through the Internet without paying any connection fees to any hosting provider. In fact, you don't even need a hosting provider to make today's exercise work. It's a pure point-to-point SIP connection from your Asterisk server to another Asterisk server. Think of it as a Skype-to-Skype call: connect for free, talk forever, pay nothing.

The Nerd Vittles Demo. Let's begin with a quick little demo to show how powerful the technology really is. We're going to assume you have an Asterisk system configured with FreePBX such as PBX in a Flash. If not, you'll have to do some reading between the lines. So we're going to add an entry to /etc/asterisk/extensions_custom.conf so that you can make a direct call to our demo hosted server at Aretta Communications in Atlanta by dialing D-E-M-O from any extension on your system. This demo also will give you a good idea why hosted service rocks since our Aretta-hosted PBX in a Flash server is sitting one millisecond off the Internet backbone.

To set this up at your end, log into your Asterisk server as root and issue the following commands only if you don't already have an extension 3366 (demo) on your system. Otherwise, edit the script and change 3366 to an available extension on your PBX.

cd /root
wget http://pbxinaflash.net/scripts/demo.pbx
chmod +x demo.pbx
./demo.pbx

Now go to any phone connected to your Asterisk server and dial D-E-M-O. NOTE: For those using FreePBX 2.4, you may need to add a Misc Destination. If so, call it Demo and enter 3366 as the number to dial. Reload the dialplan when prompted and try the call again. None of the demo apps require a password except for MailCall, option 1. The password is 1234.

Rolling Your Own on the Server-Side Now that you've seen how this works, you're probably wondering how to roll your own. This could be used for dialing into your Asterisk server from any other Asterisk server on the planet. So here's how to set up the server-side of a Poor Man's SIP server:

First, we'd recommend you obtain a fully-qualified domain name from dyndns.org and point it to the IP address of your Asterisk server. This isn't absolutely necessary provided your Asterisk server doesn't have a dynamic IP address. Obviously, if it has a dynamic IP address and your provider changes your IP address, then the SIP route must be adjusted at the client ends that will be making calls to your system.

Second, if you have a default incoming route, do NOT change the No setting for Allow Anonymous Inbound SIP Calls in the General Setting section of FreePBX. Otherwise, anyone can access your PBX from anywhere.

What we want to do instead of opening your system up to total anonymous SIP access is open a small hole for access to a specific extension or IVR (in the case of the demo). So here's how we did it for the demo above on the host system. This hole would normally be added in /etc/asterisk/extensions.conf; however, FreePBX "owns" that file and rewrites it periodically so we don't want to put our new code there. Instead, we will copy the code block from extensions.conf that we want to modify to /etc/asterisk/extensions_override_freepbx.conf. And then we'll add our changes there. Then our modifications won't get stepped on by the next FreePBX reload. The piece we want including our changes (in bold) is shown below so just cut-and-paste it into extensions_override_freepbx.conf. Be sure to examine the quotation marks to be sure WordPress hasn't converted anything to fancy quotes!!

[from-sip-external]
exten => _.,1,NoOp(Received incoming SIP connection from unknown peer to ${EXTEN})
exten => _.,n,Set(DID=${IF($["${EXTEN:1:2}"=""]?s:${EXTEN})})
exten => _.,n,Goto(s,1)
exten => s,1,GotoIf($["${ALLOW_SIP_ANON}"="yes"]?from-trunk,${DID},1)
exten => 3366,1,Goto(from-trunk,${DID},1)
exten => demo,1,Goto(from-trunk,3366,1)

exten => s,n,Set(TIMEOUT(absolute)=15)
exten => s,n,Answer
exten => s,n,Wait(2)
exten => s,n,Playback(ss-noservice)
exten => s,n,Playtones(congestion)
exten => s,n,Congestion(5)
exten => h,1,NoOp(Hangup)
exten => i,1,NoOp(Invalid)
exten => t,1,NoOp(Timeout)

Once you've saved the new code, reload your dialplan: asterisk -rx "dialplan reload". Now all we have to do is add an Inbound Route in FreePBX to handle incoming SIP calls to 3366. Click Setup, then Inbound Routes, then Add Incoming Route. For the DID, enter 3366. For the destination, choose an extension, ring group, or IVR to which you want to pass these calls. Submit your change and reload the dialplan when prompted to do so. Your new demo and 3366 anonymous SIP calls are now locked down so that the bad guys can't get into mischief. Remember, no one has to dial a DID (revealing their identity) with anonymous SIP calls... hence the name. All they need is an Internet connection.

Limiting Access By IP Address. In a business environment between branch offices, for example, you might want to further restrict access through direct SIP connections. There's an easy way to do it. Simply replace the 3366 and demo lines of code above with the following using the correct IP address from which you want to permit access. Fancy quote alert applies here, too. All the quotes must look like plain old quotes, not magazine quotes!1

exten => 3366,n,GotoIf($["${SIPCHANINFO(peerip)}"=↩
"69.59.142.143"]?from-trunk,${DID},1)
exten => demo,n,GotoIf($["${SIPCHANINFO(peerip)}"=↩
"69.59.142.143"]?from-trunk,3366,1)

Avoiding NAT Problems. If you get failed calls after setting up both ends, then you may have NAT issues with your router. Add the following code to /etc/asterisk/sip_additional_custom.conf and reload your dialplan:

[from-trunk]
type=user
nat=yes
insecure=very
dtmfmode=rfc2833
context=from-trunk
canreinvite=no
disallow=all
allow=ulaw
allow=gsm

Rolling Your Own on the Client-Side. For anyone that wants to call "SIP direct" to your system, they would simply add an entry in the [from-internal-custom] context of /etc/asterisk/extensions_custom.conf that looks like either one of the following. Either syntax works for the SIP call to the host server since we inserted entries for both 3366 and demo in the from-sip-external context on the host server. Substitute the FQDN or IP address of your own host server for our extra special one (nerdvittles.kicks-ass.net) unless you want to call our demo, of course.

exten => 3366,1,Dial(SIP/3366@nerdvittles.kicks-ass.net) ; demo from Nerd Vittles

or...

exten => 3366,1,Dial(SIP/demo@nerdvittles.kicks-ass.net) ; demo from Nerd Vittles

Now users on the client-side PBX can dial 3366 from any attached phone to reach the destination you set up on the host server. Enjoy!

Free DID and Free Incoming Calls with IPkall. There's one more really cool thing you can do now that you've mastered setting up SIP proxies with Asterisk. You can sign up for a free DID with free incoming calls to your very own Seattle phone number just like Bill Gates. Here's how:

First, in your extensions_override_freepbx.conf file that we created above, add another line that looks like the following and place it just under the demo line in bold. Change the 701 extension to match an actual ring group or extension number on your system and then reload your dialplan: asterisk -rx "dialplan reload".

exten => ipkall,1,Goto(from-trunk,701,1)

Second, go to dyndns.org and sign up for a dynamic host name with the external IP address of your Asterisk system. You can use any name you like... except nerdvittles.kicks-ass.net. That's already taken.

Third, go to IPkall's web site and fill out the form to get your free DID in Seattle. Choose SIP. Choose an area code for your free phone number. For your SIP phone number, enter ipkall. For your SIP proxy, insert the fully-qualified domain name that you chose from dyndns.org. Or you can just use the public IP address of your Asterisk server. Insert your real email address (or you'll never get your phone number) and create a password. Then wait for your email message with your new telephone number. Now call yourself on the number you just received. It doesn't get much easier than that.

Telephone Reminders Update. In case you missed the fun last month, be sure to read all about our new Telephone Reminders System for Asterisk 1.4 that provides phone and web access to schedule reminders. And, we've now added a few more requested features. First, you now can not only review reminders that have been scheduled, but you also can delete those you no longer want. And all of this still is done from the convenience of your web browser. Now you also can send reminders straight to an intercom/paging device on your system as well as directly to voicemail. For details, 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...

  1. Join the following line to the original line of code whenever you encounter the ↩ character. []

The World’s Best Asterisk Phone

For long-time readers of our column, you know that we've spent lots of time looking at and testing just about every Asterisk®-compatible SIP telephone on the planet. At long last, we have found the hands-down winner. Before spilling the beans, let us just say that we really wanted to love the Cisco 7970 phone with its color display. It is certainly the most expensive phone out there and it feels solid and the voice quality on both the headset and speakerphone is excellent. The problem is that Cisco proudly hates SIP and open source. Cisco support is worse than awful. And Cisco's SIP firmware is so bad that it's embarrassing to associate it with SIP at all. After watching its evolution through five or six versions, we're convinced that the bugs, quirks, and lack of features are for the most part intentional. We actually have had XML applications for weather, news, and AsteriDex working for the better part of a year on our 7970. But we've refused to release the applications because we didn't want to do anything to encourage anyone to buy one of these phones. Nothing that Cisco has done in the last year has changed our mind. So... Adiós Cisco. Take our advice: don't waste your time. Life's too short. </rant>

So much for the bad news. We have belatedly found a phone that meets every single business requirement any company could have. And it fulfills those functions transparently with minimal installation and setup. Every phone can be configured and upgraded quickly using either a phone or web interface or simple scripts on your Asterisk server. Voice quality and the speakerphone are incredible. For those with PBX in a Flash systems, it's even easier. Download and run our install script on your server, and we'll preconfigure your phones in under a minute with every bell and whistle in the universe. If you're a reseller, this phone with its feature set will sell systems without your having to lift a finger. No other commercial offering can touch it. Period!

We've just returned from the FreePBX Telephony Training Seminar that was held in Charleston, South Carolina last week. Suffice it say, this phone stole the show. So what is it?

THE WINNER IS... Aastra's 57i or, if you'd like up to four wireless phones to go with it, the Aastra 57i CT is also a winner. One cordless handset is included with the 57iCT. Before we roll up our sleeves and put the phone to work, let's digress for a minute and provide a little background.

For those unfamilar with Aastra, they're a Canadian company that's been around for over 25 years. When the telecom industry imploded at the turn of the century, they purchased several divisions of Nortel including their Meridian Centrex products and their telephone hardware. Several years ago, they also acquired the telephony division of Ascom. Suffice it to say, like their phones, the company is rock-solid and reliable.

That brings us back to the Aastra 57i. Believe it or not, one of the most difficult transitions for many small businesses is finding a PBX that can mimic the functionality of a key telephone. Here's a typical scenario: a secretary answers a call for the boss, places the call on hold, announces the call to the boss, and the boss picks up the call on hold. Sounds simple, doesn't it? Well, the Nerd Vittles setup for the Aastra 57i using PBX in a Flash and FreePBX 2.3 or 2.4 brings it back with ease. And let's dispense with the secrecy and tell you what else lies in store using this phone. Many thanks to both Aastra and Schmooze Communications for developing and sharing this technology with the Asterisk community!

So what do you get with the 57i? For openers, you get 4 lines per phone with a voicemail message waiting indicator that actually works. The lines also can be used for Call Presence indicators. There's an intercom button, and a Day/Night button for controlling the Day and Night functionality of your system as you've implemented it in FreePBX. Then there are Park and Parking Lot buttons that simulate key telephones. When a call comes in, answer it. To place the call on "hold," press Park. The system will tell you on which extension the call is parked using the built-in speakerphone. Then announce the call in the traditional way, and the callee can retrieve the call by simply dialing that extension. If they forget the extension, no problem! The call recipient simply presses the Parking Lot button for a list of calls waiting to be answered. Scroll to the call desired after viewing the CallerID information for each of the pending calls, and press the Answer button. Presto! Finally, a drop-in key system replacement with no retraining or learning curve.

Perhaps the most creative new feature is Visual Voicemail. If you've used an iPhone, then you already know what it is. And it works the same way on the Aastra 57i. When you press the Voicemail button, a list of pending voicemails is displayed with CallerID information for each message. Highlight the message you want to retrieve and press Play. Voila! The message is played on the speakerphone of your 57i. You can delete the message by pressing the Delete button. It's simple to use and makes you wonder why no other SIP phone has it. You'll never have to wade through the VoiceMail IVR to get your messages again.

Two directories also are provided on buttons: Nerd Vittles' AsteriDex and the Asterisk Phonebook, both of which now can be incorporated into FreePBX under the Tools tab. If you'd prefer to use SugarCRM instead of one of these, the code for that one also has been provided by Aastra and is available for your use with a simple configuration change. There's also a Contacts Directory which we'll get to in a minute.

To round out the button collection on the front of the phone, there is a customizable Speed Dial list for each phone, a Redial button tied to a list of recent calls, a Call Forwarding key to redirect your calls to another location, and a Do Not Disturb button. We should mention that the Night button, Call Forwarding button and DND button all illuminate dedicated lights plus a console message when the features have been activated. And, believe it or not, the lights actually turn off and the messages disappear when the features are disabled. We're, of course, (again) poking fun at Cisco which never has been able to get all the lights working reliability on their phones using their SIP firmware.

When an incoming call arrives or whevever you place a call, the bottom third of the screen magically changes to reveal Drop, Transfer, and Conference buttons which work as advertised.

Now for the fun stuff. When the phone is sitting idle, another menu of choices is available. And the magic for most of the technology on Page 2 is thanks to the phone's beautiful display and support for XML-based web pages, all of which are generated on your Asterisk server assuming you have Apache and PHP installed. The second page of functions for your Aastra 57i is activated by pressing the More button.

Page 2 replaces the display on the bottom third of the screen and provides new buttons for Callers, Contacts, Services, Reminders, and Other Apps. The Callers button displays a list of CallerIDs for recent calls with convenient buttons to Dial a number or Save an entry into the Contacts Directory. The Contacts or Dir button displays a list of contacts which have been saved from previous incoming calls. The Other Apps button provides access to an almost unbelievable collection of XML applications, most of which were developed by Aastra specifically for the Asterisk community.

The XML Applications button basically turns your phone into an Internet access and retrieval device using almost three dozen popular RSS Feeds. The list of applications includes all of the following:

  • Ask Google
  • CNN News
  • Top Stories
    World News
    US News
    Politics
    Law
    Technology
    Science and Space
    Health News
    Entertainment
    Travel
    Education
    Video
    Offbeat
    Most Popular
    Most Recent
  • ESPN News
  • Top Headlines
    NFL
    NBA
    MLB
    NHL
    Motorsports
    Soccer
    College Basketball
    College Football
  • Horoscopes
  • Weather
  • Movies
  • Stock Quotes
  • Today
  • Word of the Day
    Famous Birthdays
    Today in History
    Quote of the Day
  • World Clocks

Today's Project. Our objective today wasn't just to tell you about the phone. We're actually going to put all of this technology in your hands, too. Sorry to report that you still have to buy the phone. They retail for just under $300. With a little Googling, you can find them for about $200 in the U.S. The 57i CT including one wireless handset runs about $100 more. Up to four handsets and nine simultaneous calls are supported on the 57i CT.


So, here we go. Step 1 is to install a TFTP server on your PBX in a Flash server if you don't already have one. If you don't have our server, then any Asterisk 1.4 server will do so long as you have installed FreePBX and the LAMP stack: Linux, Apache, MySQL, and PHP. Now you're ready to download Aastra's latest firmware for the phone as well as all of the cool applications. Finally, you need to tell your new phone the IP address of your TFTP server and reboot it to load the new firmware and Aastra's software goodies. The whole project on a PBX in a Flash system takes about 5 minutes to complete. YMMV! Setting up extensions is a simple matter of building a .cfg file with the MAC address of each phone for the filename and placing it in the /tftpboot directory. Then you reboot the phone. Complete and unbelievably thorough documentation for the commands is available here. In the alternative, you can access the web server on the phone by pointing a browser to the phone's IP address and configure everything. You can accomplish most of the configuration on the phone itself. The account name is admin and the default password is 22222. We'll leave that for your homework project.

Installing TFTP Server. Log into your server as root and issue the following commands to install the TFTP server.

yum -y install tftp-server
/sbin/chkconfig --level 345 xinetd on
/sbin/chkconfig --level 345 tftp on
service xinetd restart

To make sure that the TFTP server installed and is running, issue the following command:

netstat -nulp|grep 69

You should see a result that includes a line that looks similar to the following:

udp 0 0 0.0.0.0:69 0.0.0.0:*

Installing the Aastra 57i Firmware and Applications. While still logged in as root, issue the following commands:1


cd /tftpboot
wget http://www.aastra.com/cps/rde/xbcr/SID-3D8CCB6A-9420713E/04/↩
57i_FC-001088-00-09_sr_2.2.0_0312.zip
unzip 57i_FC-001088-00-09_sr_2.2.0_0312.zip
wget http://www.aastra.com/cps/rde/xbcr/SID-3D8CCB6A-9420713E/04/↩
57iCT_FC-001089-00-09_sr_2.2.0_0312.zip
unzip 57iCT_FC-001089-00-09_sr_2.2.0_0312.zip
wget http://www.aastra.com/cps/rde/xbcr/SID-3D8CCB6A-9420713E/04/↩
55i_FC-001087-00-09_sr_2.2.0_0312.zip
unzip 55i_FC-001087-00-09_sr_2.2.0_0312.zip
rm *.zip
rm *.txt

As mentioned previously, there are two config files that get loaded into your Aastra 57i from your server each time the phone is rebooted. These files are located in the /tftpboot directory along with the current firmware. The aastra.cfg config file is loaded into every Aastra phone on your network. You typically set up your line buttons in this file, but it's unnecessary to get started since you can configure those in the web interface. For now, make a change in aastra.cfg to reflect the IP address of your PBX in a Flash server. So log into your server as root and issue the following nano command:

nano -w /tftpboot/aastra.cfg

Now press Ctrl-W and enter 192.168.0.178 as the search term. Press Ctrl-R. Then press the Enter key. Then type the IP address of your server and press the Enter key. When the entries are completed, save your file: Ctrl-X, Y, then Enter.

Configuring FreePBX for Aastra 57i. First, edit /etc/asterisk/features.conf and change the blindxfer line under [featuremap] so that it looks like the following. Too many SIP phones have difficulty sending two simultaneous # codes so we'll change it to one # code to make things work all the time.

blindxfer => #

Now log into FreePBX using a web browser. First, check the upper left corner of the screen and make sure that you are running FreePBX 2.3 or later. Now we want to edit the Parking Lot Configuration under the Setup tab. Make sure your entries look something like the following. The number of Parking Lot slots is, of course, up to you to meet your requirements.

Parking Lot Options
Enable Parking Lot: checked
Parking Lot Extension: 70
Number of Slots: 5
Parking Timeout: 30
Parking Lot Context: parkedcalls


Actions for Timed-Out Orphans
Parking Alert-Info: leave blank for now
CallerID Prepend: LOT
Announcement: leave blank for now


Destination for Orphaned Parked Calls

Choose an option here to meet your needs. This is the destination for unanswered calls by both the callee and the receptionist that parked the call.

Activating Intercom and Paging in FreePBX. By default, the intercom and paging functionality is turned off. To activate it, click the Setup tab and choose Feature Codes. Scroll down the list to Paging and Intercom. Check and enable all three feature codes. *80 preceding an extension number initiates an intercom or paging call. As we have implemented it, it will switch to an open line, activate the speakerphone, and let you blast your message to the desktop whether the person is on the phone or not. *55 lets them turn that off whenever they'd like, and *54 lets them turn it back on again. If you initially read this article within the first couple days of publication, this section wasn't available. And your phone configuration (/tftpboot/aastra.cfg) needs to be modified slightly. Just substitute the following lines for the corresponding lines in the existing code that you downloaded. Then reboot your phone(s).

sip intercom type: 3
sip intercom line: 4
sip intercom prefix code: *80
sip intercom mute mic: 0
sip allow auto answer: 1

Implementing Day/Night Service in FreePBX. In order to use the Day/Night key on the Aastra 57i's, you first have to enable it in FreePBX. In a nutshell, the Day/Night feature lets you define where calls should be directed when the feature is in Day Mode and where they should go when the feature is toggled to Night Mode. For home and small business use, you may alternatively use it as an In/Out button where Day=In and Night=Out. This is the first routine triggered when an inbound call arrives in your PBX. Before you can use it, you have to create a Day/Night Feature Code. We're going to set up Feature Code 1 because that's what your phones are set up to manage with the Day/Night button.

From the Setup tab, click on Day/Night Control and choose Add Day/Night Code. Now fill in the form by inserting 1 as the Feature Code index and DayNight1 as the Description. Be sure Day is set as the Current Mode. Now you simply direct where calls should be sent if it is Daytime and Nighttime. Typically, for the Day setting, you'd send the calls to a preexisting Time Condition which has been configured to activate a certain IVR during the day and a different one at night. If you're only going to control Day and Night modes with the button, then you could redirect Day calls directly to an IVR. But then it's a manual operation whereas Time Conditions are automatic. For the Night mode, choose IVR or VoiceMail you wish to activate when Night mode is activated. Remember, if you're using this in conjunction with Time Conditions, you'd probably want the Night destination to be the same as the Night setting in your Time Condition setup. Otherwise, you get two different results depending upon whether the Day/Night button is pressed or your system automatically activates Night mode based upon a Time of Day Condition. Once you choose a Day and Night destination, save your Day/Night Control Code and reload the Asterisk dialplan. Now test it by dialing *281 from a phone connected to your system. This should toggle the Day/Night mode.

But it still doesn't do anything for Inbound Calls. Why? Because you have to define the Day/Night Control DayNight1 as the initial destination for all of your Inbound Routes. So edit the Inbound Routes that you plan to manage with the control and reload your dialplan.

So the Flow Control for inbound calls works like this. The call arrives at your PBX. The Inbound Route for the DID or CallerID or Default Inbound Route sends the call to the DayNight1 control. The DayNight1 control deciphers whether it is set to Day mode or Night mode. It doesn't really matter what time of day it actually is! Depending on the setting, the DayNight1 control sends the call on to the next destination. Usually, if its Day, the call is routed either to a realtime check using a TimeCondition control or to an IVR, but the call also could be routed directly to a ring group or an extension. That's what you define in the Day/Night Control. If it's current setting is Night, the call is routed to the next hop specified as the Night option in your Day/Night Control Code. Whew! That's all the FreePBX tweaking you'll need to do to get the most out of your new phones.

Installing AsteriDex. If you haven't already done so, let's quickly install AsteriDex which provides a web-based dialer for your system as well as a MySQL-based Rolodex-like phone directory. Log into your PBX in a Flash server as root and issue the following commands:

cd /root
wget http://bestof.nerdvittles.com/applications/asteridex4/asteridex.pbx
chmod +x asteridex.pbx
./asteridex.pbx
amportal restart
wget http://pbxinaflash.net/scripts/asteridex.tgz
cd /
tar -zxvf /root/asteridex.tgz

The entire install takes less than 15 seconds. Complete documentation is available on our Best of Nerd Vittles site. The FreePBX module can be installed by accessing Module Admin, clicking on the AsteriDex module, highlighting Install, and clicking Process. Reload the dialplan when prompted.

PBX in a Flash 1.2 Addendum. For those using PBX in a Flash 1.2 or FreePBX 2.4 which is included in PBX in a Flash 1.2, a couple of simple changes need to be made to get all of the features above working. This is because FreePBX no longer permits you to change the ## setting for Blind Transfers, and this function is used for a number of features on the phone. As noted elsewhere on Nerd Vittles, some SIP phones do not reliably support ## transfers so we have changed it to #. To do this, go to FreePBX Setup, Feature Codes and disable BOTH the ## Blind Xfer option and the # Directory option. Reload the dialplan when prompted. Then log into your server as root and issue the following commands:

echo blindxfer=# > /etc/asterisk/features_featuremap_custom.conf
chown asterisk:asterisk /etc/asterisk/features_featuremap_custom.conf
asterisk -rx "dialplan reload"


 

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...

  1. Join the following line to the original line with no intervening space when you encounter the ↩ character. []