Home » Technology » Telephony (Page 74)
Category Archives: Telephony
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.
Licensing. 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...
- 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...
- Join the following line to the original line with no intervening space when you encounter the ↩ character. [↩]
Introducing Telephone Reminders for Asterisk 1.4 with Phone and Web Scheduling
If you loved your ‘Speak and Spell’ when you were a kid, then prepare for a childhood flashback… except the Nerd Vittles version is more akin to ‘Spell and Speak.’ Today’s edition of Telephone Reminders for Asterisk® 1.4 not only lets you schedule reminders by phone using your own voice, but now you can use a clever (if we do say so) web interface as well. Just fill out a simple web form to set your reminder or recurring reminder in motion, and Telephone Reminders for Asterisk will swing into action with Flite or Cepstral’s Allison to deliver your typed message to the phone of your choice at the appointed time. It’s the perfect tool for bugging the hell out of your friends without ever picking up the phone. Wanna wake your worst enemy in the middle of the night with a nice reading of the Gettysburg Address? No problem. Actually, there is a slight problem. It’s against the law to make irritating phone calls. But it’ll be great for calling all those politicians back to thank them for the hundreds of telephone messages they delivered while you were eating dinner. And, yes, we’ve preserved all of the recurring reminder functionality that you’ve grown to love. So you can schedule one-time reminders, weekday reminders, daily reminders, weekly reminders, monthly reminders, and annual reminders. Wowee! Our special thanks to the PBX in a Flash Pioneers that really shook the bugs out of our beta release, most of which were thanks to the Deprecation Aficionados on the Asterisk Development Team. STOP DEPRECATING COMMANDS! It has no place in the business community. </rant>
To celebrate the FreePBX Training Seminar being held in our Hometown U.S.A. this week, we’ve even added a new FreePBX Interface to Telephone Reminders for those of you that like FreePBX as much as we do.
While the entire application has been designed for 15-second installation on PBX in a Flash systems, it’ll work equally well on any Asterisk 1.4 system with an Apache web server, PHP, FreePBX, and Flite or Cepstral support. But why make things difficult when PBX in a Flash is so easy to install? And, did we mention? It is and always will be free… with no tricks, ever. Visit pbxinaflash.com to download your copy today.
How It Works. The original functionality of the application has been preserved. Dial 1-2-3 on a phone connected to your Asterisk 1.4 system and enter your password. The default is 12345678. Then you can record a reminder message, specify the phone number to which the reminder should be delivered, schedule the date and time for delivery, and decide whether to enable recurring reminders of one of the flavors outlined above. The Web Interface to Telephone Reminders lets you do exactly the same thing using a web browser. The only difference is that, instead of recording your reminder message, you type it and let Flite or Allison record it for you before the telephone reminder message is delivered. The FreePBX Interface to Telephone Reminders provides you the same web interface inside the FreePBX shell by adding a Reminders option under the Third Party Addon section of the Tools tab. As was true in version 3, both the telephone and web interfaces can be customized to meet your needs. See our detailed tutorial for customization tips. You now can also specify whether to use Flite or Allison for your web reminders. So let’s get started.
Installing Cepstral. If you want a perfect text-to-speech system for applications such as this one, then look no further than Cepstral. And we strongly recommend using the Voice of Allison that we’ve all grown up with in the Asterisk community. It’s the best $30 you’ll ever spend. Just follow our Cepstral installation tutorial, and you’ll be up and running in about 10 minutes. If you’ve already installed Cepstral on your system, then log into your server as root and make this one simple addition so that the Web Interface to Telephone Reminders can find the Cepstral application when it’s time to generate your text-to-speech phone reminder.
ln -s /opt/swift/bin/swift /usr/bin/swift
A Hint for the Early Pioneers. For the many pioneers that helped us get the bugs out of the beta release, THANK YOU! The best way to make sure you have a clean install of today’s release of Telephone Reminders with all the bells and whistles is to delete what you’re using now and start over. We will not delete any scheduled reminders, and it’ll only take a few minutes. Here’s how to clean off the old version on your system. Log into your server as root. First, edit crontab: nano -w /etc/crontab. Look for the two lines that look something like what you see below. Delete the two lines using Ctrl-K. Then save your changes: Ctrl-X, Y, then Enter.
0 0 * * * root /var/lib/asterisk/agi-bin/run_recurring > /dev/null
3 0 * * * root /var/lib/asterisk/agi-bin/run_reminders > /dev/null
Second, edit the extensions_custom config file: nano -w /etc/asterisk/extensions_custom.conf. There are two sections of code that need to be removed. The first will be found near the top of the file in the [from-internal-custom] context. Use Ctrl-W to search for 123, and you should see a clump of code that looks like the following. Use Ctrl-K to delete each of the lines.
exten => 123,1,Answer
exten => 123,2,Wait(1)
exten => 123,3,Authenticate(12345678)
exten => 123,4,Goto(reminder,s,1)
The second section of code to be deleted will be near the bottom of the file. Use Ctrl-W to search for reminder. Delete each line of code including the context headings from the following contexts. Hint: It’s a big chunk of code!
[reminder]
[reminder2]
[reminder3]
[reminder4]
[reminder5]
[reminder6]
[reminder7]
[reminder8]
[reminder9]
[reminder9a]
[remindem]
Then save your changes: Ctrl-X, Y, then Enter.
Now let’s delete another group of files, and you’re all set. Just execute the following commands to delete the original files:
cd /var/lib/asterisk/agi-bin
rm checkdate.php
rm checktime.php
rm reminder.php
rm run_recurring
rm run_reminders
rm /var/www/html/reminders/index.php
If You’re Not Using PBX in a Flash. Only read this section if you’re not installing Telephone Reminders for Asterisk 1.4 on a PBX in a Flash system. It’s still possible to use this application without running it on a PBX in a Flash system. The major difference is that it is up to you to assure that the prerequisites are met and properly functioning. For those running trixbox 2.x systems, that is next to impossible until the trixbox developers decide to support Flite… unless you use the commercial Cepstral product. The good news is that Cepstral apparently works. The other good news is that the telephone module of Telephone Reminders does not require either Flite or Cepstral; however, the Web Interface does. As long as you’re willing to live without the Web Interface (i.e. version 3 functionality), keep reading. First, download both the install script and the payload file and manually determine what needs to be placed where. Our recommendation is to build a /root/reminders directory and execute the following commands to get all of the code:
mkdir /root/reminders
cd /root/reminders
wget http://bestof.nerdvittles.com/applications/reminders4/reminders.pbx
wget http://pbxinaflash.net/scripts/reminders.tgz
tar -zxvf reminders.tgz
Unless you’re using PBX in a Flash or trixbox, carefully read the Telephone Reminders 3.0 tutorial on our Best of Nerd Vittles site. Then review the reminders.pbx script and make any necessary placement adjustments. Next, review the directory tree created below /root/reminders and be sure to copy and create the files and directory structure into the appropriate locations on your system. Make certain that you set ownership and file permissions properly for your system. The following assumptions are made in our setup. The root of the web server is located in /var/www/html, and Apache runs as user asterisk. AGI and PHP scripts for Asterisk are stored in /var/lib/asterisk/agi-bin. Logs for this application are written to /var/log/asterisk. Finally, the PHP and Asterisk configuration files are housed in /etc/asterisk. We don’t provide support for any installs other than on PBX in a Flash systems. Life’s too short!
Installation on PBX in a Flash Systems. We’ve saved the best for last. The entire install on a PBX in a Flash system takes about as long as it will take you to cut-and-paste the following commands. 15 seconds should do it! The script reportedly works on trixbox ce systems as well although we have not tested it. Log into your server as root and issue the following commands:
cd /root
wget http://bestof.nerdvittles.com/applications/reminders4/reminders.pbx
chmod +x reminders.pbx
./reminders.pbx
amportal restart
ln -s /opt/swift/bin/swift /usr/bin/swift
Test Run of Web Interface to Telephone Reminders. Assuming you have Cepstral running on your server, the web interface is ready to go since it comes configured to use Cepstral as the text-to-speech engine. We’ll show you how to change back to Flite in a minute. Using a web browser, go to the following site using the IP address of your Asterisk server: http://192.168.0.178/reminders/. Fill in the blanks including a reminder message. If you enter a date and time in the past, the phone number you enter will start ringing as soon as you hit the Schedule Reminder button. That’s a good way to be sure everything is working without having to sit and wait for a return call.
When Things Go Wrong. Immediately after scheduling a reminder, be sure to check for the pending reminder by clicking Review Existing Reminders. You should see both a .call file and a .gsm with otherwise matching file names. If the .gsm file is missing, one of two things has happened. If you haven’t installed Cepstral and you haven’t changed the default TTS engine, then solve it by doing one or the other. If Cepstral is working on your system (swift "Hello world." at command prompt), then you may be missing the sox application. To install it, log in as root and type: yum install sox.
Test Run of Telephone Reminders for Asterisk. On PBX in a Flash systems, the application will run once you complete the install as outlined above. Dial 1-2-3 from a phone on your system and enter the default password of 12345678 when prompted. Record a message and press #. When prompted for the phone number to which the reminder should be delivered, press # to choose the number you are calling from. When prompted for the date to deliver the message, press # to choose today. When prompted for the time, enter a 4-digit time with a 2-digit hour and 2-digit minute. Military time (24 hour clock) is fine. Make sure the time is at least 5 minutes in the future, and make sure the time on your watch and server match! Accept the settings, hang up, and wait for your reminder call.
Configuring Telephone Reminders for Asterisk. The phone interface to Telephone Reminders and the web interface are two separate applications so you’ll need to configure both of them. Let’s start with the phone interface. At a minimum, you’ll want to change the default password to something more secure. Edit /etc/asterisk/extensions_custom.conf using either nano or the FreePBX Config Edit option in Tools. Search for 123 and change the password in line 3 which looks like this. If you want to change the phone number to dial to enter reminders, simply replace 123 on every line with the number you wish to use.
exten => 123,3,Authenticate(12345678)
Update: A user on the PBX in a Flash Forum has pointed out that you can substitute the line below for the "Authenticate" line above, and the system will accept the existing voicemail password associated with the phone making the call:
exten => 123,3,vmauthenticate(${CALLERID(number)})
In order to take advantage of the new number conflict checking mechanism in FreePBX 2.4, we also recommend you add a Misc Destination for Telephone Reminders under the Setup tab. The entries should look something like the following:
Description Reminders
Dial 123
Once you’ve made the entry, click the Submit button and then reload the Asterisk dialplan when prompted.
The other changes you can make are accomplished by setting variables in the reminders.php application which is stored in /var/lib/asterisk/agi-bin. For a complete list of the variables and what they mean, take a look at the Telephony Configuration section in our Best of Nerd Vittles article.
Configuring the Web Interface to Telephone Reminders. The variable settings for the web interface are identical to those above. In addition, the text-to-speech engine can be set to Flite (instead of Cepstral) by changing the value of $ttspick from 1 to 0. The file to edit is index.php in /var/www/html/reminders. For more details, take a look at the Web Interface Configuration topic in our Best of Nerd Vittles article. Some may also find it desirable to secure the web interface to Telephone Reminders with a password. Here’s how.
Installing the FreePBX Interface to Telephone Reminders. After installing Telephone Reminders, a new Module will be available for installation in FreePBX by accessing Tools->Module Admin. Scroll to the bottom of the listing and click on Reminders and then the Install button. Once the installation completes, reload the Asterisk dialplan when prompted. A new FreePBX interface to Telephone Reminders then will display in the Third Party AddOn listing under the Tools tab in FreePBX.
Special Thanks. We want to extend our special thanks to Sangoma for their generous, unsolicited contribution to the PBX in a Flash project. While everything we produce is freely given for all to use, projects such as Nerd Vittles and PBX in a Flash still require money to fund research and product development. On behalf of the entire PBX in a Flash Development Team, thank you. SANGOMA ROCKS!!
Best of Nerd Vittles Tutorial. For those of you that prefer to read manuals, we also have a new Telephone Reminders 4.0 tutorial on our Best of Nerd Vittles site.
Need More Help? That’s what the PBX in a Flash Forum is for! Even if you don’t need help, stop by and let us know what’s on your Wish List! And remember, the Donate button at the top of Nerd Vittles makes wishes come true. 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…
Text-to-Speech Bonanza with Cepstral and Asterisk 1.4
There's almost too much to celebrate today. It's Valentine's Day, of course. You didn't forget, did you? And PBX in a Flash turns 3 months old with well over 1,000 downloads a week under our belt. Wow! Who woulda thunk? Thanks, Joe! Thanks, Tom! Get the latest scoop on our forums.
We're pleased to introduce our first hosting service provider, Aretta Communications, for those that would prefer to run PBX in a Flash in a secure, hosted environment with regular backups. Your hosted service in Atlanta will be one millisecond away from the Internet backbone. You can't do any better! And, we're excited to welcome VoipQ as our new European gateway host and contributor for PBX in a Flash. You now can access and download all of our resources through their 100 megabit connection in The Netherlands: pbxinaflash.nl. And there are two new European domains that link back to our main pbxinaflash.com site as well: pbxinaflash.eu and pbxinaflash.be. Our special thanks to Dillard and VoipQ for their support! We're also delighted to announce VoxZone as our new MidWest host for PBX in a Flash downloads. Thanks, Dinesh! And finally, we want to welcome Ad Hoc Electronics as our third West Coast host for PBX in a Flash downloads. Thanks, Jeremy! We hope you'll keep all of these open source supporters in mind when you're shopping for VoIP services and hardware.
To celebrate today's events, we thought it'd be a perfect time to introduce five newly customized Nerd Vittles applications for PBX in a Flash to take advantage of the Cepstral text-to-speech engine with Allison that we introduced last month. So today we bring you Weather by Airport Code, Weather by Zip Code, Worldwide Weather, NewsClips, and MailCall. The weather apps are self-explanatory. NewsClips reads Yahoo news feeds on any of 10 different news topics, and MailCall reads you your email by phone for one or many POP3 or IMAP email accounts. Now these new applications support both Flite and Cepstral. Once you hear Allison reading the news and your email, you'll never go back to Egor. And we're pleased to announce that we'll have a web interface to Telephone Reminders in a few short weeks. With the new Cepstral technology, you'll be able to generate single or recurring text-to-speech reminders from your web browser with delivery at the dates and times you specify... to any phone in the world. Whoa!! As a birthday bonus for Nerd Vittles readers, you can email Cepstral for a whopping, once-in-a-lifetime 15% discount code to use on your next Cepstral download and purchase.
For those using PBX in a Flash (and why wouldn't you!), all of these new applications are a 15-second install away using the downloadable scripts from the Nerd Vittles script repository. And, of course, there are dozens of additional scripts available from our PBX in a Flash Script Site which is run by Tom King.
First Install Procedure. If you've never installed an application that's on the menu today, make certain that you have first installed Cepstral. Our tutorial is here, and it only takes a few minutes. Then the process is painless with PBX in a Flash. Just log into your server as root and type the following commands... depending upon the application you wish to install. Do NOT use this procedure if you have previously installed the application on your PBX in a Flash server. We'll get to that in a minute. As mentioned, each install takes about 15 seconds. Then take a look at the instructions by clicking on the application link on the Best of Nerd Vittles site.
Weather by Airport Code. After logging into your server as root, type the following commands. Documentation is here.
cd /root
wget http://bestof.nerdvittles.com/applications/weather-airport/weather.pbx
chmod +x weather.pbx
./weather.pbx
Weather by Zip Code. After logging into your server as root, type the following commands. Documentation is here.
cd /root
wget http://bestof.nerdvittles.com/applications/weather-zip/weatherzip.pbx
chmod +x weatherzip.pbx
./weatherzip.pbx
Worldwide Weather. After logging into your server as root, type the following commands. Documentation is here.
cd /root
wget http://bestof.nerdvittles.com/applications/weather-world/weatherworld.pbx
chmod +x weatherworld.pbx
./weatherworld.pbx
NewsClips from Yahoo. After logging into your server as root, type the following commands. Documentation is here.
cd /root
wget http://bestof.nerdvittles.com/applications/newsclips/newsclips.pbx
chmod +x newsclips.pbx
./newsclips.pbx
MailCall for Asterisk®. After logging into your server as root, type the following commands. Documentation is here.
cd /root
wget http://bestof.nerdvittles.com/applications/mailcall/mailcall.pbx
chmod +x mailcall.pbx
./mailcall.pbx
Choosing Flite or Cepstral. As installed, the five applications all rely upon Flite as the default text-to-speech (TTS) engine. If you'd like to change it, here's how. There are two places in which text-to-speech is used for these applications. The first is a little code that is inserted in your dialplan in the /etc/asterisk/extensions_custom.conf file. The second is in the PHP code that does the heavy lifting for each application. You can choose Cepstral as the TTS engine in either or both places for each application. We'll walk you through modifying the Weather by Airport Code application to support Cepstral, but the process is identical for the other applications. The two things you'll need to know to make the changes, are the number to dial for the application, e.g. 611 for Weather by Airport Code, and the name of the PHP file, e.g. nv-weather.php. Here's the info for all five apps just so you don't have to do any hunting:
- Weather by Airport Code... 611, nv-weather.php
- Weather by Zip Code... 947, nv-weather-zip.php
- Worldwide Weather... 612, nv-weather-world.php
- NewsClips from Yahoo... 511*, nv-news.php (No editing of dialplan 511 code is required)
- MailCall for Asterisk... 555, nv-mailcall.php
Changing DialPlan Code to Cepstral. Log into your server as root and edit the extensions_custom.conf file in /etc/asterisk: nano -w extensions_custom.conf. Now search for the number to dial from the table above. For example, for Weather by Airport Code, you'd press Ctrl-W, then type 611, then press Enter. You'll be positioned on code that looks like the following:1
exten => 611,1,Answer
exten => 611,2,Wait(1)
exten => 611,3,Set(TIMEOUT(digit)=7)
exten => 611,4,Set(TIMEOUT(response)=10)
exten => 611,5,Flite("At the beep enter the three character ↩
airport code for the weather report you wish to retrieve.")
;exten => 611,5,Swift("At the beep enter the three character ↩
airport code for the weather report you wish to retrieve.")
exten => 611,6,Read(APCODE,beep,3)
exten => 611,7,Flite("Please hold a moment while ↩
we contact the National Weather Service for your report.")
;exten => 611,7,Swift("Please hold a moment while ↩
we contact the National Weather Service for your report.")
exten => 611,8,AGI(nv-weather.php|${APCODE})
exten => 611,9,NoOp(Wave file: ${TMPWAVE})
exten => 611,10,Playback(${TMPWAVE})
exten => 611,11,Hangup
Notice the semicolons at the beginning of the two lines of code. Those indicate comments in the PHP world, and those lines are not executed. You'll note that both of the commented lines include the word Swift which, as you learned from the installation tutorial, activates the Cepstral TTS engine. Immediately under each of those lines is an identical line to activate Flite. So, to swap TTS engines, simply comment out the two Flite lines and uncomment the two Swift lines. When you're finished, your code should look like this:
exten => 611,1,Answer
exten => 611,2,Wait(1)
exten => 611,3,Set(TIMEOUT(digit)=7)
exten => 611,4,Set(TIMEOUT(response)=10)
;exten => 611,5,Flite("At the beep enter the three character ↩
airport code for the weather report you wish to retrieve.")
exten => 611,5,Swift("At the beep enter the three character ↩
airport code for the weather report you wish to retrieve.")
exten => 611,6,Read(APCODE,beep,3)
;exten => 611,7,Flite("Please hold a moment while we ↩
contact the National Weather Service for your report.")
exten => 611,7,Swift("Please hold a moment while we ↩
contact the National Weather Service for your report.")
exten => 611,8,AGI(nv-weather.php|${APCODE})
exten => 611,9,NoOp(Wave file: ${TMPWAVE})
exten => 611,10,Playback(${TMPWAVE})
exten => 611,11,Hangup
Don't change anything else. When your code looks like ours, save your changes by pressing Ctrl-X, then Y, then the Enter key. Reload your Asterisk dialplan to make the changes take effect:
asterisk -rx "dialplan reload"
Changing PHP Application Code to Cepstral. Log into your server as root and issue the following commands using the name of the PHP file for the application you want to change:
cd /var/lib/asterisk/agi-bin
nano -w nv-weather.php
At the top of the file, you'll notice several lines with variables that can be changed.
//-------- DON'T CHANGE ANYTHING ABOVE THIS LINE ----------------
$debug = 1;
$newlogeachdebug = 1;
$emaildebuglog = 0;
$email = "yourname@yourdomain" ;
$ttspick = 0 ;
//-------- DON'T CHANGE ANYTHING BELOW THIS LINE ----------------
To activate the Cepstral TTS engine, just change the value for $ttspick from 0 to 1. Then save your changes: Ctrl-X, Y, then Enter. Now try out your fancy new weather application using Cepstral by dialing 611 from any phone on your PBX in a Flash system.
Upgrading from Previous Installs. If you have already installed one or more of these five Nerd Vittles applications, here's a quick tutorial on how to update your code to the latest and greatest with full Cepstral support. We've already preconfigured the code below to use Cepstral. If you want to use Flite for some of the apps, make the changes following the instructions above. Log into your server as root and issue the following commands:
cd /root
mkdir cepstral
cd cepstral
wget http://nerdvittles.com/wp-content/cepstral.zip
unzip cepstral.zip
For each application that you've already installed, copy the PHP file from /root/cepstral to /var/lib/asterisk/agi-bin and then set the proper ownership of the new files:
cd /root/cepstral
cp nv-mailcall.php /var/lib/asterisk/agi-bin/nv-mailcall.php
cp nv-news.php /var/lib/asterisk/agi-bin/nv-news.php
cp nv-weather.php /var/lib/asterisk/agi-bin/nv-weather.php
cp nv-weather-zip.php /var/lib/asterisk/agi-bin/nv-weather-zip.php
cp nv-weather-world.php /var/lib/asterisk/agi-bin/nv-weather-world.php
cd /var/lib/asterisk/agi-bin
chown asterisk:asterisk nv*.php
chmod 775 nv*.php
Now we need to edit /etc/asterisk/extensions_custom.conf and clean out the old dialplan code for these applications and then replace it with the new dialplan code. First, make a duplicate of the file in case something goes wrong:
cp /etc/asterisk/extensions_custom.conf /etc/asterisk/extensions_custom.conf.bak
Then edit the file: nano -w /etc/asterisk extensions_custom.conf and search (Ctrl-W) for the beginning of each chunk of dialplan code using the phone numbers for the various applications that are shown above in the Choosing Flite or Cepstral section, e.g. 611, 947, 612, 511, and 555. Using Ctrl-K, delete each subsequent line of dialplan code that contains the phone number for that application until you've removed the entire section of code for each application. Then search for the next phone number and repeat the process. Once you've deleted all of the existing code for these five applications, cut-and-paste the following code just below [from-internal-custom] at the top of the file. NOTE: Do NOT paste in a section of the code below if you haven't previously installed that particular application!
; -- Begin New Nerd Vittles Code to Support Cepstral TTS
; Worldwide Weather Forecasts
exten => 612,1,Answer
exten => 612,2,Wait(1)
exten => 612,3,Set(TIMEOUT(digit)=7)
exten => 612,4,Set(TIMEOUT(response)=10)
;exten => 612,5,Flite("At the beep enter the code for the weather report you wish to retrieve.")
exten => 612,5,Swift("At the beep enter the code for the weather report you wish to retrieve.")
exten => 612,6,Read(APCODE,beep,1)
;exten => 612,7,Flite("Please hold a moment while we retrieve your report.")
exten => 612,7,Swift("Please hold a moment while we retrieve your report.")
exten => 612,8,AGI(nv-weather-world.php|${APCODE})
exten => 612,9,NoOp(Wave file: ${TMPWAVE})
exten => 612,10,Playback(${TMPWAVE})
exten => 612,11,Hangup
; Weather by Zip Code
exten => 947,1,Answer
exten => 947,2,Wait(1)
exten => 947,3,Set(TIMEOUT(digit)=7)
exten => 947,4,Set(TIMEOUT(response)=10)
;exten => 947,5,Flite("At the beep enter the five digit code for the weather report you wish to retrieve.")
exten => 947,5,Swift("At the beep enter the five digit code for the weather report you wish to retrieve.")
exten => 947,6,Read(ZIPCODE,beep,5)
;exten => 947,7,Flite("Please hold a moment while we contact the National Weather Service for your report.")
exten => 947,7,Swift("Please hold a moment while we contact the National Weather Service for your report.")
exten => 947,8,AGI(nv-weather-zip.php|${ZIPCODE})
exten => 947,9,NoOp(Wave file: ${TMPWAVE})
exten => 947,10,Playback(${TMPWAVE})
exten => 947,11,Hangup
; Weather by Airport Code
exten => 611,1,Answer
exten => 611,2,Wait(1)
exten => 611,3,Set(TIMEOUT(digit)=7)
exten => 611,4,Set(TIMEOUT(response)=10)
;exten => 611,5,Flite("At the beep enter the three character airport code for the weather report you wish to retrieve.")
exten => 611,5,Swift("At the beep enter the three character airport code for the weather report you wish to retrieve.")
exten => 611,6,Read(APCODE,beep,3)
;exten => 611,7,Flite("Please hold a moment while we contact the National Weather Service for your report.")
exten => 611,7,Swift("Please hold a moment while we contact the National Weather Service for your report.")
exten => 611,8,AGI(nv-weather.php|${APCODE})
exten => 611,9,NoOp(Wave file: ${TMPWAVE})
exten => 611,10,Playback(${TMPWAVE})
exten => 611,11,Hangup
; NewsClips from Yahoo
exten => 511,1,Answer
exten => 511,2,Wait(1)
exten => 511,3,Set(TIMEOUT(digit)=7)
exten => 511,4,Set(TIMEOUT(response)=10)
exten => 511,5,AGI(nv-news.php|topstories)
exten => 511,6,NoOp(Wave file: ${TMPWAVE})
exten => 511,7,Playback(${TMPWAVE})
exten => 511,8,Wait(1)
exten => 511,9,Hangup
; MailCall for Asterisk 1.4
exten => 555,1,Answer
exten => 555,2,Wait(1)
exten => 555,3,Set(TIMEOUT(digit)=7)
exten => 555,4,Set(TIMEOUT(response)=10)
;exten => 555,5,Flite("At the beep enter your e-mail password.")
exten => 555,5,Swift("At the beep enter your e-mail password.")
exten => 555,6,Read(PWCODE,beep,4)
;exten => 555,7,Flite("Please hold a moment.")
exten => 555,7,Swift("Please hold a moment.")
exten => 555,8,AGI(nv-mailcall.php|${PWCODE})
;exten => 555,9,Flite("Thank you for calling. Good bye.")
exten => 555,9,Swift("Thank you for calling. Good bye.")
exten => 555,10,Hangup
; -- End New Nerd Vittles Code to Support Cepstral TTS
Once you get all of the code pasted into extensions_custom.conf, save your changes: Ctrl-X, Y, then Enter. Then reload your dialplan and add a symbolic link to Cepstral:
asterisk -rx "dialplan reload"
ln -s /opt/swift/bin/swift /usr/bin/swift
FreePBX Patch. Something about our applications gives FreePBX fits when you attempt to do a subsequent dialplan reload. So here's the patch to fix that. While still logged in as root, issue the following commands:
cd /root
wget http://pbxinaflash.net/scripts/fixconf.zip
unzip fixconf.zip
chmod +x fixconf.sh
./fixconf.sh
chmod 1777 /tmp
Aretta Communications for Hosted PBX in a Flash Service. We've saved the best for last today. Many of you have been asking for recommendations on hosted PBX service. And today we finally have one for you. Aretta Communications is the premier provider of hosted Asterisk solutions worldwide. Based in telecom-savvy Atlanta and pioneering the business VoIP triple play, Aretta is the first provider to combine hosted Asterisk-based servers with an integrated, high voice quality SIP Trunking offering, and pre-configured VoIP handsets that arrive at your door ready to plug in and start making calls. No longer do you have to try and cobble together components from different places for your PBX in a Flash server. It's finally all available from one company that understands Asterisk and has the flexibility and in-house expertise to work with any kind of custom configuration or application. Every hosted PBX in a Flash server sits in secure telco hotels with UPS power and on-net connectivity to the major Tier 1 providers.
Using software virtualization, Aretta is able to dramatically reduce the cost of a hosted PBX in a Flash server. The hosted offerings scale in a virtual environment to up to 32 simultaneous calls per virtual server. Beyond 32 calls, dedicated dual processor PBX in a Flash servers are available that can handle 48 to 96 simultaneous calls. These can be stacked to provide high density systems. For those large hosted TDM deployments, Aretta can handle on-net termination of T1 or T3 voice circuits into dedicated PBX in a Flash servers with TDM cards. Aretta has a standard weekly backup offering for all of its hosted servers and nightly backups can also be accommodated. Backups can even be sent to geographically disperse datacenters for the ultimate in disaster recovery.
Aretta literally is changing the game in the hosted PBX market by pioneering a brand new pricing model. Forget the old per-extension pricing we've all seen where you get nickeled and dimed for every little feature you want to add to your individual lines. Finally, you pay one low monthly price for an entire system with a complete feature set and the ability to add an unlimited number of extensions. Aretta's pricing is customer-friendly, based on the number of active calls going through the system at any given time. This allows you to start small and grow as needed. PBX in a Flash hosted plans start at 2 channels and expansion is easy and automatic to four, eight, sixteen channels and beyond. Every feature within Asterisk is included in the monthly price. The only a-la-carte option is for help configuring your system. This is available as a one-time initial configuration option when you sign up for your hosted PBX in a Flash system or on a per-incident basis once it is installed.
The NetSIP trunking offering from Aretta provides SIP origination and termination in a variety of configurations. You can choose to pay by the minute or reduce your calling rates with bundled packages of minutes. Unlimited flat-rate inbound-only DIDs are available in 46 countries worldwide. DIDs in over 6300 rate centers in the United States are available in either 'Local Inbound' or 'Enhanced Local Service' configurations. Aretta has also developed a streamlined online number porting system to allow for automatic LOA generation making it easy to port numbers from other providers.
Aretta also offers pre-configured Polycom and Linksys handsets through its online store that arrive at your doorstep ready to plug-in and start calling. Priced competitively with the added bonus of coming configured, IP phone configurations are done automatically while the devices are in transit. Through its extensive customer deployments, Aretta has navigated the QoS and NAT related issues that can occur with typical IP-PBX deployments. Aretta builds and sells pre-configured edge routers based on the open source DD-WRT software to provide a low-cost premise edge device to keep local extension calls on the LAN and provide a great solution for voice QoS.
Last, but not least, in addition to hosted PBX in a Flash systems, Aretta has the flexibility and expertise to build and host custom applications using PBX in a Flash as the core underlying technology. Examples include:
- Hosted VICIDIAL - outbound and predictive dialing based on Asterisk
- Hosted A2Billing - the leading open source prepaid and calling card platform for Asterisk
- High Availability Asterisk - two separate geographically disperse Asterisk servers running in a High Availability configuration with failover
- Custom IVR development
- IAX Trunking
If you can dream it and run it with PBX in a Flash, Aretta can build and host it for you. So what are you waiting for, visit Aretta Communications today and take advantage of their special offer for new PBX in a Flash customers.
Nerd Vittles Cepstral Showdown with Allison TTS (courtesy of les.net). You now can take today's Nerd Vittles projects for a test drive... by phone! 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.
Here's where it gets interesting. We decided to let you compare the voice quality of the calls using our Comcast home cable service versus Aretta Communications' Hosted PBX in a Flash service. The same code is running on both systems and both systems are using les.net for origination. The only difference is that our home system is running on a $199 WalMart Green PC. To make things interesting, we're not going to tell you which phone number goes to which location. Clue #1: Neither system is actually in the Nerd Vittles Valley Girl Headquarters in California. Clue #2: One system may or may not be in the same city as its area code. Give us a little credit. We're smart enough to assign DIDs to any PBX we happen to like... especially if it might confuse our readers. So don't just pick a favorite number because you happen to know that Aretta is in Atlanta and so is the 678 area code. We're tempted to actually swap the DIDs around once or twice just to keep everyone on their toes. And, of course, Comcast may have some additional tricks up their sleeve to make this more interesting.
So... let the voting begin. Dial away on the two numbers shown above and report your results in a comment. If you get a message that Allison isn't available or if you just get silence, simply try your call a little later. We weren't smart enough to limit inbound calls to one channel, and FreePBX doesn't seem to be able to do it either. We can't wait to read what our judges have to say. 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...
- Join the following line with the original line whenever you encounter the ↩ character. [↩]
Introducing the Stealth AutoAttendant for Asterisk 1.4 and FreePBX
Last week we introduced the powerful, new Allison text-to-speech voice for Asterisk® using Cepstral. Now that Allison is an integral part of your free PBX in a Flash server, let's put her to good use. Today we're going to roll up our sleeves and show you how to build a typical Interactive Voice Response (IVR) system for your server. Once again we've chosen our Stealth AutoAttendant because it demonstrates the real power of the latest release of FreePBX.
Here's the way our Stealth Auto Attendant works. A call comes into your PBX, and we first decide whether it should be processed using business hour rules or nighttime settings. This works identically for home use except the times may be a little different. Once the call flow is chosen based upon the time of day, then we're going to play a generic greeting that goes something like this. For home use, it might say: "Hi. You've reached the Mundy's residence. Please hold a moment while we connect your call." For small office use, it might say: "Hi. You've reached Wonder Widgets International. Please hold a moment while we locate a sales agent to assist you." The point of these greetings is to welcome the caller without providing a clue that an IVR system is being used for the initial call processing, hence the name Stealth.
With the Stealth AutoAttendant, if the caller doesn't press any buttons on the phone, their call will be transferred to a default ring group after the greeting message completes. If the caller actually knows about the IVR, the caller can press a button while the greeting message is playing to transfer to a particular extension, listen to voicemail, get a weather or news update, check their email, or get dialtone to make a call to Europe using your company's favorite El Cheapo provider.
If no button is pressed during the greeting message, then the incoming call is passed to a ring group while music on hold plays to the caller. If no one is available to take the call, then the call is next routed to a second IVR that gives the caller the option of transferring to one or more cellphones or leaving a message on your voicemail system. Other hidden options can be embedded in this IVR as well.
In the old days, i.e. before last week, today's design was inhibited by the need to acquire customized voice messages for the various IVRs. For the design we've outlined above, you would actually have needed messages for three IVRs: the initial greeting for the Stealth AutoAttendant, the NoAnswer IVR, and the Applications IVR for access to weather, news, and email apps. If you sprung for the $24 Cepstral investment last week, then that's all a thing of the past. Now you can record your own messages and still use Allison as your voice talent. We would hasten to add that we sent Allison a note last week congratulating her on the new Cepstral voice. The note we got back went something like this: "I'm excited about the Cepstral technology. I just hope it doesn't run me out of business." Well, as fantastic as the Cepstral technology is, it's never going to quite measure up to using the real deal. But, as they say, it's close enough for government work and will certainly suffice for home or small office use, two markets that probably would not have hired professional voice talent to begin with. So let's get started.
Being Smart About Cepstral Utilization. There are a couple of things you need to know up front about using Cepstral. First, while the licenses are relatively inexpensive, they still are provided on a per connection basis. For example, if you're using Cepstral to read back a weather report, that ties up one license. If another caller is using Cepstral to play back email messages, that's another license. So, while $30 is cheap, on a 100-user PBX, the cost is a good bit more than $30. Unlike in the Flite days, where Egor could be handling multiple tasks at no cost, you need to be smarter about the way you deploy Cepstral on your server unless your PBX is basically a one-user system. For example, it doesn't make sense to use Cepstral interactively for playing back a 7-day weather forecast. That process would consume more than a full minute of a Cepstral license while Cepstral could just as easily have written the weather forecast out to a .wav file in less than one second. The same goes for IVR prompts. Don't even think about using Cepstral interactively for IVR applications. Instead, write out the IVR prompts to .wav files, and play those to callers which consumes no Cepstral licenses! Repeat after me: "Wave files free. Interactive Cepstral = $30 per simultaneous use." Design accordingly.
Building IVR Voice Prompts with Cepstral. Let's begin by building the voice prompts for our three IVRs. You obviously can customize these as we go along so that, when we're finished, you have a flawless system to deploy in your own home or office. If you didn't install Cepstral with the Allison voice last week, do that first. Here's the link. Our plan goes like this. We're going to record the voice prompts on your PBX in a Flash server, then copy them to your Windows or Mac desktop, and then we'll use FreePBX to assimilate them into your system for use with your IVRs. That's just the FreePBX way of doing things, but it's not really all that painful.
Before we begin, you need to figure out what you want your three prompts to say. For the Stealth AutoAttendant, we gave you some examples above, but you can tailor these to meet your own needs. Once you have the prompt the way you want it, step 1 is to test it. Log into your server as root, plug in some speakers, and issue the following Cepstral command:
swift "Hi. You've reached the Mundy's residence. Please hold a moment while I connect your call."
You may not be entirely happy with the way your prompt sounds. This is where your artistic creativity comes into play. First, you can adjust the spelling of certain words to try and smooth out the rough edges. You also can alter the playback using SSML commands to adjust pauses, playback speed, and many other settings. And finally you can phonetically spell problem-words to address specific issues. For example, to sound out Cepstral, here is the sample code:
Welcome to <phoneme ph="k eh1 p s t r ah0 l">Cepstral</phoneme>.
If this looks like Greek to you, not to worry. There is excellent documentation, but it still takes a bit of experimentation. Suffice it to say that every vowel has various sounds, and the 0 or 1 on the end of the vowel sound tell Cepstral whether to apply emhasis to the particular sound. Here's the list of sounds you have at your disposal. And here are the W3C SSML commands for Cepstral, all of which work under Linux.
Once you get your prompt the way you want it, our recommendation is to first save the text including the surrounding quotation marks to a text file. Then, if you want to change it later, you'll have your original text to work with. To save it to a text file, do this:
echo "Hi. You've reached the Mundy's residence. Please hold a moment while I connect your call." > welcome.txt
Then edit the file (nano -w welcome.txt) and put quotation marks at the beginning and end of the text. Also replace any embedded quotes and apostrophes with normal (i.e. not typographic) quotes and apostrophes.
To generate the .wav file from your .txt file using Cepstral, issue the following command:
swift -f welcome.txt -o welcome.wav
Now repeat the steps above to create the following prompts:
noanswer.txt: "I'm sorry. Noone is available to take your call at the moment. If you'd like to try their cellphones, press 1 for Joe or 2 for Betty. If you'd prefer to leave a message, press 3."
apps.txt: "For Mail Call, press 1. For News Clips, press 2. For weather forecasts by airport code, press 3. For weather forecasts by zip code, press 4. To schedule a telephone reminder, press 5."
FreePBX Preparations. Now that we have our voice prompts ready, copy them to your desktop. Then open FreePBX by pointing your web browser to the IP address of your PBX in a Flash system. We're going to be doing a good bit of editing even though it'll only take a few minutes. Firefox works much better with FreePBX than Internet Explorer so don't say we didn't warn you.
As with most applications, there's a certain order in doing things that makes life much simpler. So it is with FreePBX. First, be sure you have built all the pieces of the puzzle that you plan to use in your IVRs before you build your IVRs. This includes extensions, ring groups, system recordings aka voice prompts, DISA, miscellaneous destinations, etc. Second, we need to address a little Asterisk quirk. For whatever reason, Asterisk has a difficult time transferring calls to a cellphone when you get into nested IVRs. If you recall from our initial design, the plan is to provide a second IVR to catch unanswered calls after the first IVR transfers the inbound calls to a ring group. If you plan to have a cellphone transfer as one of the options in your second IVR, then here's a word to the wise. Don't use Misc Destinations to set up the numbers for your cellphones, or the calls will never be completed! What will work is to create additional extensions on your system specifically for your cellphones.
For today's exercise, we're going to assume that Joe and Betty's extensions are 201 and 202 on your PBX. So we'll also want to create extensions 301 and 302 for their cellphones. Just create SIP extensions in the usual way with no voicemail. If you want to force cellphone voicemail to kick in when a cellphone call goes unanswered, be sure to adjust the Ring Time for your cellphone extensions to 40-60 seconds when you set up these extensions. Now drop down to the Linux command prompt on your server and issue the following commands to set permanent forwarding of these extensions to Joe and Betty's cellphone numbers. Use the desired cellphone numbers in the appropriate format to match your dialplan. Be sure to test this by dialing each extension from a phone on your system to be sure the calls actually get transferred!
asterisk -rx "DATABASE PUT CF 301 6781234567"
asterisk -rx "DATABASE PUT CF 302 6787654321"
There's an alternate way to set the call forwarding which Philippe Lindheimer of FreePBX fame recommends... and he oughta know. When you create these "cellphone extensions," adjust the dial entry from SIP/301 and SIP/302 to look like the following example. Then you won't need the database manipulation step above.
dial... Local/6781234567@from-internal
Ring Groups. The other trick you need to appreciate is that FreePBX provides much enhanced call routing flexibility with ring groups. With an extension, your only option is to send unanswered calls to voicemail. With a ring group, calls can be routed to more than a dozen different destinations including IVRs, other ring groups, voicemail in 3 flavors, miscellaneous destinations, DISA, conferences, or even custom applications. So we typically recommend setting up ring groups for each individual extension on your system, e.g. 401 and 402 for Joe and Betty in our example. And, then set up an additional ring group (499) which includes every extension on your system. If you have work groups or departments, you can use the rest of the 490's for those ring group collections. For now, build these ring groups with a No Answer Destination of the VoiceMail extension matching each extension number. For home use, we recommend setting all of the extensions to the same voicemail box although this isn't required.
Importing Voice Prompts. Once you have all of your extensions, cellphone extensions, and ring groups set up, let's spend a minute importing your three new voice prompts that will be used in the IVRs: welcome.wav, noanswer.wav, and apps.wav. Because of the FreePBX design, all three of these .wav files need to be on the same desktop that you're using to access FreePBX. Then choose System Recordings from the FreePBX Setup tab. Click on the Browse button to select each .wav file. Then click the Upload button to import it into FreePBX. Name each recording and click the Save button. Let's use welcome, noanswer, and apps for the names. Reload FreePBX once you have imported all three .wav files.
Adding DISA. DISA is an extremely powerful function in Asterisk and even more so in FreePBX. Create a DISA option using the link on the Setup tab. Let's name it Standard, enter a PIN of sufficient length that you don't have to worry about compromising your PBX, set response timeout to 7 and digit timeout to 5, and leave Require Confirmation unchecked. If you're going to be placing calls from your cellphone to your PBX in order to take advantage of better outbound call rates using DISA, then you may also want to enter your cellphone number in the CallerID field. This will assure that calls placed through your PBX still have your cellphone's CallerID when they arrive at their destination.
Creating Misc Destinations. If you haven't already installed the Nerd Vittles goodies, now's the time to do it. We recommend you install at least two of the weather applications, the NewsClips application, the MailCall application, and the Telephone Reminders app. You can find all of the installation scripts here. Each install takes less than 15 seconds.
Once you've installed the five applications, create a Misc Destination with the Phone Number of each application plus a Misc Destination to retrieve your voicemail. We recommend:
MailCall... 555
Weather-Airport... 611
Weather-ZipCode...947
NewsClips... 511
Reminders... 123
VoiceMail... *98
Building the Apps IVR. We need to build the IVRs in reverse order so that the Apps IVR will be available for use in the NoAnswer and Welcome IVRs, and the NoAnswer IVR will be available for use in the Welcome IVR. So let's build the Apps IVR first. Click on the IVR link in FreePBX and then click Add IVR. Make the following entries on the form. When you run out of IVR options, click the Increase Options button to add another one. Click the Save button when you're finished and then reload FreePBX.
Name... AppsIVR
Timeout...10
Enable Directory...unchecked
Enable DirectDial...unchecked
Announcement...apps
1...Misc Destination: MailCall
2...Misc Destination: NewsClips
3...Misc Destination: Weather-Airport
4...Misc Destination: Weather-ZipCode
5...Misc Destination: Reminders
Building the NoAnswer IVR. Next we build the NoAnswer IVR. It will not only be used during the day when noone can answer a call, but it will also function as your night service. Design accordingly! Click on the IVR link in FreePBX and then click Add IVR. Make the following entries on the form. When you run out of IVR options, click the Increase Options button to add another one. Click the Save button when you're finished and then reload FreePBX. NOTE: We don't like people waking us up in the middle of the night, but if you do, you can add the 0 option shown in the Welcome IVR below.
Name... NoAnswerIVR
Timeout...10
Enable Directory...unchecked
Enable DirectDial...unchecked
Announcement...noanswer
1...Extensions: Joe Cell <301>
2...Extensions: Betty Cell <302>
3...Voicemail: <201> Joe (no message)
4...Voicemail: <202> Betty (no message)
5...Extensions: Joe <201>
6...Extensions: Betty <202>
7...Misc Destination: Voicemail
8...DISA: Standard
9...IVR: AppsIVR
Building the Stealth AutoAttendant. Finally we build the Welcome IVR. Click on the IVR link in FreePBX and then click Add IVR. Make the following entries on the form. When you run out of IVR options, click the Increase Options button to add another one. Click the Save button when you're finished and then reload FreePBX.
Name... WelcomeIVR
Timeout...10
Enable Directory...unchecked
Enable DirectDial...unchecked
Announcement...welcome
1...Extensions: Joe Cell <301>
2...Extensions: Betty Cell <302>
3...Voicemail: <201> Joe (no message)
4...Voicemail: <202> Betty (no message)
5...Extensions: Joe <201>
6...Extensions: Betty <202>
7...Misc Destination: Voicemail
8...DISA: Standard
9...IVR: AppsIVR
0...Ring Group: 499
t...Ring Group: 499
i...Ring Group: 499
Passing Through CallerID on Cellphone Transfers. If you really want to get fancy and your trunk provider supports adjusting of CallerID on outbound calls (normally accomplished by setting sendrpid=yes in your outbound trunk setup), here's an easy way to customize FreePBX to assure that calls delivered to your cellphone from your Asterisk system still retain the original caller's number rather than the CallerID number of your Asterisk system. Keep in mind that virtually no cellphone provider will let you forward the CallerID name of the original caller, but you can send their number. Log into your Asterisk server as root and edit extensions_custom.conf: nano -w /etc/asterisk/extensions_custom.conf. Then insert code at the bottom of the file that looks something like the following. Note that vitel-outbound is the name of the outbound trunk you wish to use to place the call from your Asterisk system to your cellphone. It is followed by the actual number of your cellphone in a format that matches what your carrier expects to receive. Save your changes: Ctrl-X, Y, then Enter. Now edit your IVR setup and, instead of using 301 as the Option 1 destination for Joe's cellphone, choose Custom App: custom-cellphone,301,1. Then do the same thing for Option 2, extension 302: Custom App: custom-cellphone,302,1. Then save your changes and reload the Asterisk dialplan when prompted.
[custom-cellphone]
exten => 301,1,Background(pls-hold-while-try)
exten => 301,2,Set(CALLERID(num)=${CALLERIDNUM})
exten => 301,3,Dial(SIP/vitel-outbound/6781234567,60,m)
exten => 301,4,VoiceMail(204@default)
exten => 301,5,Hangup
exten => 302,1,Background(pls-hold-while-try)
exten => 302,2,Set(CALLERID(num)=${CALLERIDNUM})
exten => 302,3,Dial(SIP/vitel-outbound/6787654321,60,m)
exten => 302,4,VoiceMail(204@default)
exten => 302,5,Hangup
Revising the IVRs to Cross-Link Back To Welcome IVR. Finally, edit the NoAnswer and Apps IVRs and add a zero option that links back to the Welcome IVR:
0...IVR: WelcomeIVR
Revising the Ring Groups to Support the IVR. Now edit the 499 Ring Group (at least) and modify the Destination on No Answer to point to the NoAnswerIVR. Save your changes and reload FreePBX. The reason we couldn't do this previously should be obvious. But, in case your head is spinning, the reason is because the IVRs didn't yet exist when we initially created the Ring Groups so we couldn't select an IVR as a destination.
Setting Up Time Conditions. While this is the entry point for incoming calls, it's also the last piece that you configure when setting up an AutoAttendant because we want to route calls to different IVRs depending upon the time of day. As with all things FreePBX, you need to have the IVRs built before you can use them to route calls with Time Conditions. Basically, what we want to do is route incoming calls to the Welcome IVR during the day and to the NoAnswer IVR at night. Click on the Time Conditions link and choose Add New Time Condition. Fill in the form as suggested below:
Time Condition Name...Daily
Time to Start...07:00
Time to Finish...21:00
Weekday Start...Monday
Weekday Finish...Sunday
Month Day Start...1
Month Day Finish...31
Destination Match...IVR: WelcomeIVR
Destination Not Match...IVR: NoAnswerIVR
Routing Incoming Calls to Time Conditions. The final step is to route your incoming calls. Simply adjust your Inbound Routes to point to Time Condition: Daily. Save your changes and reload FreePBX.
For an exhaustive look at Building IVRs with Asterisk and FreePBX, read our more recent article here.
FreePBX Training - Only 2 Seats Left! We're excited about the upcoming FreePBX Training Seminar, and today we want to remind the foot-draggers that you've almost missed the boat. This Friday is the registration deadline, and there are only two remaining seats available. And, yes, in addition to some fantastic training and the fine cuisine of Charleston, you're going to be treated to some once-in-a-lifetime hardware deals on the very finest Asterisk compatible hardware cards and servers for your business. So sign up today and join the fun. This will be the hands-down very best Asterisk and FreePBX training course that money can buy.
This is a DON'T MISS opportunity to learn everything you ever wanted to know about FreePBX, Asterisk, and Linux. The course will cover IVRs, ACDs, IRQs, E911, and the rest of the alphabet as well as routing, trunking, dialplan integration, remote office configuration, echo cancellation, TDM hardware, gateways, IP phones. It's a very full, three-day course with a half day devoted to branding and selling Asterisk systems. The seminar is being held at one of Charleston's premier hotels, the Embassy Suites Historic Charleston, with gorgeous suites, swimming pool and exercise room, free WiFi, free breakfasts, and free cocktails every evening. There also will be evening sessions to sit down one-on-one with the FreePBX and PBX in a Flash developers. So come join us while space is still available!
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...