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

The Most Versatile VoIP Provider: FREE PORTING

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

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


  1. Ward – Thank you, thank you, thank you. You have no idea how long I have been waiting for this (OK, maybe you do). Great work as usual.

  2. Where can I get some more information on the text-to-speech feature – I wanted to use this as an appointment notifier and convert the date and time of the appointment to speech. ie Your appointment with us is on <date> and <time>.
    Awesome work – love it.

    [WM: We plan to release a commercial version of TeleYapper soon that will include the variables you have indicated in addition to other user-defined fields that can be added to your existing database. Stay tuned!]

  3. Thank you very much M. Ward. The application work the first time but… The Alison voice start at the end of the first ring, the system doesn’t wait for a answer.

    Any Idea
    P.S. sorry for my bad english, I’m a french Canadian from Québec

  4. If you are calling with a pstn line and not voip, you need to set the silenc interval to greater than 4 seconds since this is the time between rings (in the u.s.a). Try setting the silence duration to 4250 (4250 ms).

    [WM: Great tip! You learn something every day. Thanks.]

  5. yes I’m calling with a pstn line (Digium 4FXO). Hum… Thank you M. Ward for your prompt response but, where I can find this setting (silence duration)?

    [WM: nano -w /etc/asterisk/extensions_custom.conf and Ctrl-W to search for Set(TIMEOUT(digit)=4) and Set(TIMEOUT(response)=4). Change the 4’s to 6’s. Then Save your changes: Ctrl-X, Y, then Enter.]

  6. Great software,

    I have one question, what is the maximum simultamnous calls teleyapper can handle?

    [WM: That depends upon the horsepower of your server and the number of lines you have available to process outbound calls. Beefy server and unlimited outbound trunks = LOTS of simultaneous calls.]

  7. Hello,
    I tried to add the ASNWERTIME variable to have the duration of the call in the ‘callee’ table, but it appears not to be correctly send through deadAGI. Does anyone have some idea ?

    [WM: Check for typos. 🙂 ]

  8. Is it possible, that teleyapper leave the msg without ringing the client phone. As there are many other voice blasting service provider offers.

    [WM: We don’t control the end-user’s phone. That’s under the control of the telephone provider. So… the short answer is "no."]

  9. The greetings are located in "/var/lib/asterisk/sounds/custom/", NOT in "/var/log/asterisk/sounds/custom". Could the posted be edited to fix this? It might save others time. 🙂

    [WM: Thanks, John. Sorry for the typo. It’s been fixed.]

  10. How difficult would it be to make each group use their own broadcast message? My thoughts were a change to the dial plan logic so that right after authentication you select the group you want to work with then go on the the yapper context, but I am not sure how to maintain ${GROUP} or if it is possible to do something like:
    exten => s,4,Record(custom/broadcast${GROUP}:gsm)
    exten => s,6,Playback(custom/broadcast${GROUP})

    where each broadcast file is a concatenation of broadcast . ${GROUP} i.e. custom/broadcast0 for group 0. Does this make sense?

Comments are closed.