Home » Posts tagged 'ivr' (Page 2)

Tag Archives: ivr

The Most Versatile VoIP Provider: FREE PORTING

The Definitive Quick Start Guide: Introducing Incredible PBX for XiVO



Today we kick off a new Asterisk® adventure with the introduction of Incredible PBX™ for XiVO®. This pure GPL implementation of Asterisk has no strings, no gotchas, no hidden agenda, and no primadonnas. It’s open source code with no prohibitions on redistribution. The XiVO developers actively participate in the XiVO and PBX in a Flash™ communities and actually listen to constructive suggestions to improve their product. Changes happen in days, not years. Today we celebrate the return of true GPL project development and the end of closed-source ISOs and commercial modules with costly annual support contracts. Join us!

UPDATE: This article has been superseded. For the latest tutorial, go here.

If you’ve been following Nerd Vittles these past two months, then you already know there is literally nothing in the open source Unified Communications world that you can’t do faster, better, and cheaper with XiVO: automatic backups every night, seamless upgrades every three weeks, uncrippled endpoint provisioning for dozens of phones, powerful call centers, high availability redundant servers, real-time Asterisk technology out of the box, flexible SDK and APIs, and much more.

XiVO Installation Methodology

There are two ways to build XiVO servers. You can start with a minimal install of Debian 8 (64-bit), or you can use the 64-bit XiVO ISO. The advantage of the XiVO ISO is that building a system from the ISO gets you BOTH Debian 8 AND the basic XiVO install. However, you can only use the XiVO ISO on platforms that you own, not on virtual machines controlled by somebody else. Stated another way, if you plan to use dedicated hardware or VirtualBox or VMware ESXi, use the XiVO ISO. Otherwise, install a minimal Debian 8 (64-bit) operating system and nothing else on your platform of choice. Now you’re ready to choose your Incredible PBX installer. Install time: about 5-20 minutes depending upon the platform.

IMPORTANT: When you build your Debian 8 platform on either stand-alone hardware or as a virtual machine, use a fully-qualified domain name for your server’s hostname, e.g. xivo.incrediblepbx.com, NOT xivo. Disaster awaits if you forget this! But, don’t worry. If you do forget, the install will blow up, and you’ll get to start over. But you’ll remember the next time. 😉

Incredible PBX Feature Set

If you’ve been sleeping under a rock for the last few years, you may be wondering what the Incredible PBX offering includes. We’ve tried to preserve much of the functionality of prior releases in the XiVO implementation, and there is still more to come. Here’s a quick summary of two dozen features and applications that Incredible PBX offers for XiVO today:

Recent Additions: Skype Connect, Port Knocker, PPTP VPN, Pico TTS, A La Carte installer, Telephone Alarms.

The 3 Flavors of Incredible PBX for XiVO

To kick off our Independence Day celebration, we introduced three new Incredible PBX turnkey installers for XiVO because of the numerous platforms on which XiVO will run. We’ve now combined all three of the original installers into a single script for ease of use.

For those new to XiVO, there are three steps in getting a XiVO PBX up and running: (1) Debian 8 OS installation, (2) XiVO installation, (3) and XiVO basic configuration (typically using a web browser). The Incredible PBX installer has different tasks based upon how far along in this installation process you happen to be on a particular platform. Our special thanks to Sylvain Boily for his Python wizard to assist us in providing turnkey installs to the greatest extent possible. So here’s the new installer, but you are well advised to actually follow the platform tutorial (below) for your provider because of special quirks that are provider-specific:

IncrediblePBX13-XiVO.sh – Suitable for Debian 8 (32-bit or 64-bit) minimal platform where XiVO is not installed. Use with Cloud VMs. Also works with Debian 8 (32-bit or 64-bit) platform with XiVO installed but not configured. This is typically the situation if you built your server using the XiVO ISO. And the new installer works with Debian 8 (32-bit and 64-bit) platform with XiVO installed and configured.

WARNING: Incredible PBX erases and replaces stuff as part of its installation procedure. NEVER install Incredible PBX over the top of an existing production server!

Incredible PBX Installation Procedure


We’ve taken the guesswork out of this for a number of platforms by providing detailed tutorials that you can follow:

Choosing a XiVO Hardware Platform

If your situation falls somewhere in between all of these, here’s a quick summary. For stand-alone systems and virtual machine platforms that you own (such as VirtualBox and VMware ESXi), download and install the 64-bit version of XiVO using the XiVO ISO. For most other virtual machine platforms in the Cloud, you’ll start by creating a 64-bit Debian 8 virtual machine with at least 1GB of RAM and a 20GB drive. For turnkey cloud servers such as RentPBX, simply choose the VM option that already has Debian 8 and XiVO preinstalled.

Once you have your platform up and running, simply download and run the Incredible PBX installer:

cd /root
wget http://incrediblepbx.com/IncrediblePBX13-XiVO.sh
chmod +x IncrediblePBX13-XiVO.sh
./IncrediblePBX13-XiVO.sh


Incredible PBX Initial Configuration

Here are the first steps to complete after you have finished your initial XiVO and Incredible PBX installation. Log into the web interface at the IP address of your server using username root and the web password you created during installation.

All of this initial setup will be completed under the IPBX option of the Services tab as shown below. For each of the categories below, click on the matching section and tab in XiVO’s IPBX toolbar and fill in the properties as indicated.

UPDATE: The latest Incredible PBX for XiVO installer automatically configures SIP defaults and a dozen SIP trunks for you using XiVO Snapshots if you elect to install all of the Incredible PBX features when you run the installer. If so, you can skip through the next few sections of this tutorial.

General Settings:SIP Protocol


WARNING: If your XiVO server is running as a virtual machine behind a hardware-based NAT router and the virtual host also is sitting behind the same router, you may experience failed calls by setting the external IP address and local network addresses in the following screen. Try calls first without these settings, and add them only if you experience calling issues such as failed calls or one-way audio.

Genl Settings:SIP Protocol:Signaling:Codecs

In order of priority, move desired Codecs from right to left by clicking on + icons. If you plan to use the IAX or SCCP protocol for phones and/or trunks, also select Default Codecs under General Settings:IAX Protocol:Default and General Settings:SCCP Protocol tabs, respectively.

Genl Settings:SIP Protocol:Signaling:DNS

For DNS Manager and Server Lookup support (required for some SIP providers), enable the DNS Request field:

IPBX Configuration:Contexts

XiVO differs from some other Asterisk implementations in the way it manages the routing of calls. XiVO uses Contexts to define what constitute Internal calls (Default), External calls (Outcalls), and Incoming calls (Incalls). Think of these contexts as dialing rules. They define how the three categories of calls are managed internally by the XiVO PBX and determine which callers can do what with your PBX resources. XiVO uses dial strings and ranges of phone numbers to manage and constrain how various classes of calls are routed. The reason for these call specifications is pretty simple. You don’t want outside callers dialing into your PBX and making outbound calls using your PBX trunks on your nickel.

Some basic settings to enable internal calls and allow creation of user accounts were configured when you set up your XiVO PBX by running the configuration script. However, before anyone can make or receive calls to/from outside the XiVO PBX, you’ll need some additional specifications.

Edit the from-extern (Incalls) context and click Incoming Calls tab then the + icon. Add a range of DID numbers for incoming calls that will be allowed. These are the phone numbers assigned to SIP and IAX trunks that were acquired through commercial providers such as Vitelity. Note that the example below assumes that your incoming DID trunks deliver calls with 10-digit numbers. If you’re using a service such as Google Voice that delivers calls with 11-digit numbers starting with a 1, then add an additional range of numbers starting with a 1. If the provider delivers calls with +44, then you’d add an additional range with that prefix. Click Save once you’ve entered your settings.

Let’s also modify the Default context to support MeetMe conferencing for your server. Edit the default context and click Conference Rooms tab then + icon. For the extension range, enter 2663-2665. 2663 spells C-O-N-F by the way. Then click Save. If you have a DAHDI timing source on your server, you then can add conferences: IPBX Setting:Conference Rooms. If you don’t have a DAHDI timing source or you don’t know what any of this means, keep reading. There’s an easier way to set up a conference room for your users.

While you’re still in the (2) Default context, click on the (3) General tab and (4) move all of the sub-contexts to the left (Selected) column. (5) Then click the Save button.

General Settings:Advanced (Time Zone)

IPBX Settings:Users:Add User

Before you can actually make or receive calls with XiVO PBX, you’ll first need at least one User, Extension, and Line. So click on the (1) Users tab and then (2) the + icon and Add option (as shown below) to get started.

Use the General tab entries below as a guide to create your first user account. You only need to fill in options (1) and (2) if you would like this user to receive a simultaneous call on a mobile phone whenever this user’s internal phone rings.

In the Lines tab, assign an internal phone number for this user. By default, the initial configuration script created a range of extension numbers for you: 701-799. This can be changed in the next section to meet your specific requirements.

Once you’ve chosen an extension, click the Save button and a Line will automatically be generated to associate with your new User account.

Next, goto IPX Settings:Lines and click the pencil icon to obtain your SIP username and password credentials. You’ll need these to connect a SIP phone or softphone to your user account.

While you’re obtaining your username and password SIP credentials, fill in the blanks for the Line and click Save:

IPX Settings:Users (Voicemail Setup)

There are two steps to setting up voice mailboxes correctly. First, you need to configure the voicemail system defaults to accommodate your required time zones. The system only comes with support for Europe/Paris.

Go to (1) IPX General Settings:Voicemails and (2) click Time Zones tab and then (3) + Add. (4) Name your new time zone, (5) select the correct Time Zone from the pull-down list, and (6) add the following under Options and (7) Save your entry:

'vm-received' q 'digits/at' kM

Go to (1) IPX Settings:Users, edit your (2) User account, and click the (3) Voicemail tab. (4) Click the + icon to Add a new Voicemail account. (5) Check Enable Voicemail. (6) Fill in the form using the sample below. Be sure to choose the correct Time Zone for your voicemails. Uncheck Delete message after notification to retrieve voicemail messages by dialing *98 from an extension. (7) Click Save.


Setting Up a Ring Group in XiVO

A ring group is a collection of extensions to which calls can be routed. In XiVO terminology, they’re known as Groups. Extensions in a Group can be set to ring simultaneously or in one of six round-robin configurations based upon factors such as previous call volume. Before you can create a ring group, you first have to enable a range of extensions to dedicate to Groups. Edit the Default context, click the Groups tab, and then click the + Add icon to add a range of extension numbers:

To create a new ring group, choose IPX Setttings -> Groups and click the + Add icon. A typical setup to ring all extensions simultaneous and play a ring tone to the caller would look like this:

Next, click on the Users tab and move the desired extensions to the the selected side of the window. Then click Save.

Setting Up Trunks and Routes for XiVO Calling

Before you can make calls to phones outside your PBX or receive calls from outside your PBX, you’ll need one or more trunks. We’ve simplified the process of setting these up by providing step-by-step tutorials for the leading trunk providers. They are reproduced below for ease of reference:

XIVO Trunk Implementation Tutorials

Once you’ve added one or more trunks, you’ll need to tell XiVO how to route outgoing and incoming calls. Here are our step-by-step tutorials on setting up Outbound Calling Routes and Incoming Call Routes:

XIVO Call Routing Tutorials

Deploying Google Voice with OAuth on XiVO PBX

Beginning in mid-August, 2016, native Google Voice with OAuth support became available on the Incredible PBX for XiVO platform. It supports deployment of multiple Google Voice trunks on any XiVO server. This new Nerd Vittles tutorial will walk you through implementation.

Using an SMTP Mail RelayHost with Postfix

To cut down on spam, many ISPs no longer allow SMTP mail traffic that originates from downstream mail servers. If your server is connected to an ISP such as Comcast, that would be you. Here’s how to reconfigure the Postfix mail server included with XiVO to process your outgoing emails using your ISP as a mail relay.

First, edit /etc/postfix/main.cf and search for relayhost. Replace it with the entries below. If it’s not in the file, then just add the following entries to the end of the file:

relayhost = smtp.comcast.net:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasldb
smtp_sasl_security_options = noanonymous

Next, create /etc/postfix/sasldb and add the following entries: your ISP (smtp.comcast.net) followed by a TAB and then your full comcast login name, a colon, and your Comcast password. No spaces! Save the file.

Next, create a hashed version of the file: postmap sasldb

Then restart Postfix: /etc/init.d/postfix restart

Now send yourself a test email like this:

echo "test" | mail -s testmessage yourname@yourmailprovider.com

Getting Started with SQLite3 on the XiVO Platform

Here are a couple SQLite3 queries to get you started with syntax:

sqlite3 /var/lib/asterisk/agi-bin/zipcodes.sqlite "select zip,city,state from zipcodes where zip=29401;"
sqlite3 /var/lib/asterisk/agi-bin/asteridex.sqlite 'select name,out from user1 where name LIKE "%Airlines%";'

A bonus script in /root will let you convert existing MySQL databases to SQLite3. For example, if you’re currently using AsteriDex on another Incredible PBX platform, it only takes a couple seconds to convert your MySQL database to SQLite3. The syntax to run the script looks like this:

./mysql2sqlite3.sh -u root -ppassw0rd yourdatabase | sqlite3 yourdatabase.sqlite

Move the script to the server on which your existing MySQL databases are stored and run it there using the above syntax. Then copy the asteridex.sqlite file to your XiVO server and save it in /var/lib/asterisk/agi-bin.

Getting Started with Incredible PBX Call Logs

To retrieve SQLite3 call log data, here are a few examples to get you started:

ALL: sqlite3 /var/log/asterisk/master.db "select * from cdr"
DATE: sqlite3 /var/log/asterisk/master.db "select * from cdr where calldate >= '2016-05-22'"
NPA: sqlite3 /var/log/asterisk/master.db "SELECT * from cdr WHERE clid LIKE '%<843%'"
DEST: sqlite3 /var/log/asterisk/master.db "SELECT * from cdr WHERE dstchannel LIKE '%411%'"
FLDS: sqlite3 /var/log/asterisk/master.db "PRAGMA table_info(cdr)"

To retrieve the CDR log in CSV format suitable for spreadsheets, download:

/var/log/asterisk/cdr-csv/Master.csv

Managing Your Logs with XiVO

XiVO is a busy place especially on a busy PBX. Call logs and traditional Asterisk and Linux logs grow like crazy. We have added the following entries to /etc/crontab to assure that you don’t inadvertently run out of disk space on your server. Modify them to meet your own requirements.

10 1    * * *  root    rm -f /tmp/tts* > /dev/null 2>&1
11 1    * * *  root    rm -f /var/log/asterisk/*.gz > /dev/null 2>&1
11 2    * * *  root    rm -f /var/log/asterisk/*.1.gz > /dev/null 2>&1
12 1    * * *  root    rm -f /var/log/*.gz > /dev/null 2>&1
12 2    * * *  root    rm -f /var/log/*.1.gz > /dev/null 2>&1

Activating Voice Recognition for XiVO

Google has changed the licensing of their speech recognition engine about as many times as you change diapers on a newborn baby. Today’s rule restricts use to “personal and development use.” Assuming you qualify, the very first order of business is to enable speech recognition for your XiVO PBX. Once enabled, the Incredible PBX feature set grows exponentially. You’ll ultimately have access to the Voice Dialer for AsteriDex, Worldwide Weather Reports where you can say the name of a city and state or province to get a weather forecast for almost anywhere, Wolfram Alpha for a Siri-like encyclopedia for your PBX, and Lefteris Zafiris’ speech recognition software to build additional Asterisk apps limited only by your imagination. And, rumor has it, Google is about to announce new licensing terms, but we’re not there yet. To try out the Voice Dialer in today’s demo IVR, you’ll need to obtain a license key from Google. This Nerd Vittles tutorial will walk you through that process. Don’t forget to add your key to /var/lib/asterisk/agi-bin/speech-recog.agi on line 72.

Adding DISA Support to Your XiVO PBX

If you’re new to PBX lingo, DISA stands for Direct Inward System Access. As the name implies, it lets you make calls from outside your PBX using the call resources inside your PBX. This gives anybody with your DISA credentials the ability to make calls through your PBX on your nickel. It probably ranks up there as the most abused and one of the most loved features of the modern PBX.

There are three ways to implement DISA with Incredible PBX for XiVO. You can continue reading this section for our custom implementation with two-step authentication. There also are two native XiVO methods for implementing DISA using a PIN for security. First, you can dedicate a DID to incoming DISA calls. Or you can add a DISA option to an existing IVR. Both methods are documented in our tutorial on the PIAF Forum.

We prefer two-step authentication with DISA to make it harder for the bad guys. First, the outside phone number has to match the whitelist of numbers authorized to use your DISA service. And, second, you have to supply the DISA password for your server before you get dialtone to place an outbound call. Ultimately, of course, the monkey is on your back to create a very secure DISA password and to change it regularly. If all this sounds too scary, don’t install DISA on your PBX.

1. To get started, edit /root/disa-xivo.txt. When the editor opens the dialplan code, move the cursor down to the following line:

exten => 3472,n,GotoIf($["${CALLERID(number)}"="701"]?disago1)  ; Good guy

2. Clone the line by pressing Ctrl-K and then Ctrl-U. Add copies of the line by pressing Ctrl-U again for each phone number you’d like to whitelist so that the caller can access DISA on your server. Now edit each line and replace 701 with the 10-digit number to be whitelisted.

3. Move the cursor down to the following line and replace 12341234 with the 8-digit numeric password that callers will have to enter to access DISA on your server:

exten => 3472,n,GotoIf($["${MYCODE}" = "12341234"]?disago2:bad,1)

4. Save the dialplan changes by pressing Ctrl-X, then Y, then ENTER.

5. Now copy the dialplan code into your XiVO setup, remove any previous copies of the code, and restart Asterisk:

cd /root
sed -i '\:// BEGIN DISA:,\:// END DISA:d' /etc/asterisk/extensions_extra.d/xivo-extrafeatures.conf
cat disa-xivo.txt >> /etc/asterisk/extensions_extra.d/xivo-extrafeatures.conf
/etc/init.d/asterisk reload

6. The traditional way to access DISA is to add it as an undisclosed option in an IVR that is assigned to one of your inbound trunks (DIDs). For the demo IVR that we installed last week, edit the ivr-1.conf configuration file and change the "option 0″ line so that it looks like this. Then SAVE your changes.

exten => 0,1(ivrsel-0),Dial(Local/3472@default)

7. Adjust the inbound calls route of one of your DIDs to point to the demo IVR by changing the destination to Customized with the following Command:

Goto(ivr-1,s,1)

Here’s how ours looks for the Nerd Vittles XiVO Demo IVR:



8. Now you should be able to call your DID and choose option 0 to access DISA assuming you have whitelisted the number from which you are calling. When prompted, enter the DISA password you assigned and press #. You then should be able to dial a 10-digit number to make an outside call from within your PBX.

SECURITY HINT: Whenever you implement a new IVR on your PBX, it’s always a good idea to call in from an outside number 13 TIMES and try every key from your phone to make sure there is no unanticipated hole in your setup. Be sure to also let the IVR timeout to see what result you get.


Setting Up a Softphone or WebRTC to Connect to XiVO

If you’re a Mac user, you’re lucky (and smart). Download and install Telephone from the Mac App Store. Start up the application and choose Telephone:Preference:Accounts. Click on the + icon to add a new account. To set up your softphone, you need 3 pieces of information: the IP address of your server (Domain), and your Username and Password. In the World of XiVO, you’ll find these under IPBX:Services:Lines. Just click on the Pencil icon beside the extension to which you want to connect. Now copy or cut-and-paste your Username and Password into the Accounts dialog of the Telephone app. Click Done when you’re finished, and your new softphone will come to life and should show Available. Dial the IVR (4871) to try things out. With Telephone, you can use over two dozen soft phones simultaneously on your desktop.

Prefer to use WebRTC from your browser as a softphone? XiVO has you covered. Complete setup instructions available here.

For everyone else, we recommend YateClient which is free. Download it from here. Run YateClient once you’ve installed it and enter the credentials for the XiVO Line. You’ll need the IP address of your server plus your Line username and password associated with the 701 extension. On the XiVO platform, do NOT use an actual extension number for your username with XiVO. Go to IPBX Settings:Lines to decipher the appropriate username and password for the desired extension. Click OK to save your entries.

Test Drive of Sample Incredible PBX Apps

Once your softphone is registered, you can try out some of the Incredible PBX sample applications:

  • 4871 (IVR1) – Allison’s Demo IVR
  • 411 (Voice Dialing) – Call by Name (try "Delta Airlines")
  • 2663 (CONF) – Conference Room with Music on Hold
  • 951 – Yahoo! News Headlines (TTS)
  • 947 (ZIP) – NWS Weather by ZIP Code
  • 53669 (LENNY) – The Telemarketer’s Worst Nightmare

You can review the Dialplan code in the GUI by choosing IPBX Configuration:Configuration Files and clicking xivo-extrafeatures.conf. The sample IVR code is in ivr-1.conf. This Nerd Vittles tutorial will walk you through building your own IVRs for XiVO.

Using PBX Status with XiVO

For those that like to see how things are going from the Linux CLI, a modified version of pbxstatus is available for XiVO. From the Linux CLI, type: pbxstatus.

Using FQDNs with the Travelin’ Man 3 Firewall

If you plan to use FQDNs with your IPtables firewall or if your remote users will be using a Dynamic DNS provider to keep their IP addresses fresh, be sure to review Step #5 in the Travelin’ Man 3 tutorial which explains how to configure your firewall to automatically refresh IP addresses based upon changes in dynamic addresses. All of the necessary components already have been activated. Simply insert your FQDN entries using /root/add-fqdn and modify /root/ipchecker.

PortKnocker for XiVO: Your Firewall Safety Net

If you use a dynamic IP address for your local PC and that address changes, you may find yourself locked out of your own server unless you have heeded the advice in the preceding section. But there’s still hope. Incredible PBX for XiVO now includes the PortKnocker utility which lets you ping three predefined TCP ports in sequence to regain access to your server. You can read all about PortKnocker in this Nerd Vittles article. Unfortunately, PortKnocker doesn’t do you a bit of good if you haven’t deciphered what the three-port secret handshake is for your server. Before you forget, review /root/knock.FAQ and put the information in a safe place where you can retrieve it if the need should ever arise.

Adding a PPTP VPN to XiVO

Microsoft introduced the Point-to-Point-Tunneling-Protocol (PPTP) with Windows 95. Back then we knew it as Dial-Up Networking. Suffice it to say that, in those days, PPTP was anything but secure. Unfortunately, the bad name kinda stuck. For the most part, the security issues have been addressed with the possible exception of man-in-the-middle attacks which are incredibly difficult to pull off unless you are a service provider or have access to the wiring closets of your employer. You can read the long history of PPTP VPNs on Wikipedia for more background. If you’re traveling to China or other democracy-challenged destinations, you probably shouldn’t rely upon PPTP for network security. If these security considerations aren’t applicable in your situation, keep reading because PPTP VPNs are incredibly useful and extremely easy to deploy for an extra layer of VoIP and network security in most countries that have severe wiretapping penalties in place.

PPTP VPNs also provide home-away-from-home transparency to home office network services. Simply stated, with a PPTP VPN, you get a private IP address on the XiVO PBX that lets you do almost anything you could have done sitting at a desk in the home office. PPTP VPNs probably won’t work on most OpenVZ platforms such as Wable and ImpactVPS. But they work great on virtual machines such as CloudAtCost and Digital Ocean. For a quick-and-dirty back door into your server, a PPTP VPN is hard to beat. Here’s how to set one up on your XiVO PBX using 128-bit encryption. Make up a very obscure username and password in the first two lines below:

PPTPUSER=somebodyspecial
PPTPPASS=someverysecurepassword
apt-get -y update
apt-get -y install pptpd
sed -i 's|#ms-dns 10.0.0.1|ms-dns 8.8.8.8|' /etc/ppp/pptpd-options
sed -i 's|#ms-dns 10.0.0.2|ms-dns 8.8.4.4|' /etc/ppp/pptpd-options
echo "localip 172.16.16.100" >> /etc/pptpd.conf
echo "remoteip 172.16.16.101-199" >> /etc/pptpd.conf
echo "$PPTPUSER pptpd $PPTPPASS *" >> /etc/ppp/chap-secrets
/etc/init.d/pptpd restart
# show logged in PPTP users
last | grep ppp

Connect to your PPTP server from a Windows or Mac in the usual PPTP way. Once connected, you will be assigned an IP address in the range of 172.16.16.101-199. You then can access your XiVO PBX on the following IP address: 172.16.16.100.

Everything You Need to Know About XiVO Backups

Another feature of XiVO that separates the men from the boys is its documentation. In the case of backups, you’ll find everything you need to know here. All backups are stored on your XiVO server’s local drive in /var/backups/xivo. Be sure you have ample storage space available and, if you’re smart, you’ll copy both data.tgz and db.tgz from the local drive to a safe remote location periodically just in case disaster strikes. The documentation shows you how to quickly restore a backup should that ever become necessary.

Upgrading XiVO to the Latest Release

The XiVO development cycle is nothing short of miraculous. A new version is released every three weeks! The average time to close a bug has dropped from 315 days in 2009 to 28 days in 2012! You’ll probably want to keep your system current. 🙂

Upgrading XiVO is even easier than restoring a backup. Upgrade documentation is available here. Because we’ve added the Travelin’ Man 3 firewall, we recommend stopping IPtables during an upgrade and then restarting it when you’re finished. Your phone system is disabled during the upgrade. When upgrading XiVO, remember to also upgrade all associated XiVO Clients. Be sure to verify that things are back to normal once the upgrade procedure is completed: xivo-service status.

The commands to upgrade your XiVO PBX are as follows:

/etc/init.d/netfilter-persistent stop
xivo-upgrade
iptables-restart
# restore Incredible PBX module and ODBC configuration
cp -p /etc/asterisk/modules.conf.dpkg-old /etc/asterisk/modules.conf
cp -p /etc/asterisk/res_odbc.conf.dpkg-old /etc/asterisk/res_odbc.conf
xivo-service restart
# code below reactivates Incredible PBX web apps
cd /
wget http://incrediblepbx.com/incredible-nginx.tar.gz
tar zxvf incredible-nginx.tar.gz
rm -f incredible-nginx.tar.gz
/etc/init.d/nginx restart

Google Voice CLI and SMS Messaging Support

Thanks to Nick Pettazzoni, beginning with the August 29, 2016 release of Incredible PBX for XiVO, you now can take advantage of the pygooglevoice implementation of gvoice as well as Nerd Vittles’ SMS messaging and message blasting utilities. If you’re using an earlier release, it’s easy to add this functionality to your server as well:

cd /root
wget http://incrediblepbx.com/install-gv-cli
chmod +x install-gv-cli
./install-gv-cli

Be advised that the Google Voice CLI interface (gvoice) uses plain-text Google Voice passwords, not OAuth. Before most Google Voice accounts will work with gvoice and smsblast, you’ll need to do the following and then immediately login to gvoice from the Linux CLI at least once to mark your account as safe for access from this location. Here are the steps:

  1. Log in to the Gmail account you plan to use with gvoice
  2. While logged in, open a new browser tab to this site and enable Less Secure Apps
  3. Open another browser tab and enable the Google Reset procedure here
  4. Return immediately to the Linux CLI and login to gvoice

Creating an SMS Message Blast with XiVO

Here’s how to take advantage of SMS Message Blasting using a Google Voice account with Incredible PBX for XiVO. Log into your server as root and do the following:

  1. Edit /root/smsmsg.txt and insert the text message to be sent
  2. Edit /root/smslist.txt and create a list of the phone numbers to receive the SMS message
  3. Edit /root/smsblast and insert your gvoice username and password
  4. Run /root/smsblast to kick off the SMS Blast

Incredible PBX Application Quick Start Guide

Here’s a quick refresher on some of the Incredible PBX applications that have been installed. There’s also a link for more information. This remains a work-in-progress so expect more applications in coming weeks.

XiVO and Incredible PBX Dial Code Cheat Sheets

Complete XiVO documentation is available here. But here are two cheat sheets in PDF format for XiVO Star Codes and Incredible PBX Dial Codes. See also the previous 7 Nerd Vittles XiVO tutorials, all of which are listed below. Enjoy!


Taking Nerd Vittles’ XiVO IVR for a Test Drive

There’s a Demo IVR running at www.pacificnx.com on their XenServer virtualization platform. Scott McCarthy, a leading outside XiVO developer and a principal at PacificNX, advises they have a $50 a month GOLD platform specifically tailored to XiVO for those needing 99.999% reliability, 24/7 support with nightly backups and enterprise level firewalls that have intelligence to stop attacks and look for viruses, spyware and more. That’s what you’ll be hearing when you call the Nerd Vittles Demo IVR:

Nerd Vittles Demo IVR Options
1 – Call by Name (say "Delta Airlines" or "American Airlines" to try it out)
2 – MeetMe Conference
3 – Wolfram Alpha (Coming Soon!)
4 – Lenny (The Telemarketer’s Worst Nightmare)
5 – Today’s News Headlines
6 – Weather Forecast (enter a 5-digit ZIP code)
7 – Today in History (Coming Soon!)
8 – Speak to a Real Person (or maybe just Lenny if we’re out)

Don’t Stop Reading Just Yet. We’ve been busy since this article was first published in June, 2016. Continue reading about the latest developments including XiVO Snapshots.

Published: Monday, June 27, 2016  Updated: Regularly



Need help with Asterisk? Visit the PBX in a Flash Forum.


 

Special Thanks to Our Generous Sponsors


FULL DISCLOSURE: ClearlyIP, Skyetel, Vitelity, DigitalOcean, Vultr, VoIP.ms, 3CX, Sangoma, TelecomsXchange and VitalPBX have provided financial support to Nerd Vittles and our open source projects through advertising, referral revenue, and/or merchandise. As an Amazon Associate and Best Buy Affiliate, we also earn from qualifying purchases. We’ve chosen these providers not the other way around. Our decisions are based upon their corporate reputation and the quality of their offerings and pricing. Our recommendations regarding technology are reached without regard to financial compensation except in situations in which comparable products at comparable pricing are available from multiple sources. In this limited case, we support our sponsors because our sponsors support us.

BOGO Bonaza: Enjoy state-of-the-art VoIP service with a $10 credit and half-price SIP service on up to $500 of Skyetel trunking with free number porting when you fund your Skyetel account. No limits on number of simultaneous calls. Quadruple data center redundancy. $25 monthly minimum spend required. Tutorial and sign up details are here.

The lynchpin of Incredible PBX 2020 and beyond is ClearlyIP components which bring management of FreePBX modules and SIP phone integration to a level never before available with any other Asterisk distribution. And now you can configure and reconfigure your new Incredible PBX phones from the convenience of the Incredible PBX GUI.

VitalPBX is perhaps the fastest-growing PBX offering based upon Asterisk with an installed presence in more than 100 countries worldwide. VitalPBX has generously provided a customized White Label version of Incredible PBX tailored for use with all Incredible PBX and VitalPBX custom applications. Follow this link for a free test drive!
 

Special Thanks to Vitelity. Vitelity is now Voyant Communications and has halted new registrations for the time being. Our special thanks to Vitelity for their unwavering financial support over many years and to the many Nerd Vittles readers who continue to enjoy the benefits of their service offerings. We will keep everyone posted on further developments.
 



Some Recent Nerd Vittles Articles of Interest…

Mastering XiVO IVR and AutoAttendant Design




Today we want to talk a little about design choices and IVRs. First and foremost, we don’t want to leave anyone behind during our XiVO adventure. XiVO is a platform that adjectives really can’t describe. It’s that good and, frankly, we’re having a hard time believing it’s been around for almost a decade and nobody much talked about it. Leave it to the crazy Americans to only look at stuff from the U.S. of A. Funny thing is that the two major GUIs for Asterisk® now are both Canadian-based.


One of our PIAF Forum readers posted a comment last week that said:

The only downside I see is that XiVO does not have [a] GUI for building IVRs. To build [a] complex, nested IVR system, everything has to be thought about in great detail writing contexts and dial plans to suit your unique requirements. It would be nice if XiVO offered a GUI for building IVRs.

This raises some issues about GUI design and development that are worth addressing. As with any GUI, the development cycle is lengthy and incredibly complex. This is especially true with XiVO where new versions are released every two weeks! In our second XiVO article, we showed how easy the upgrade procedure was. Those coming from other Asterisk platforms will appreciate this little shocker. XiVO doesn’t break stuff with their upgrades. Frankly, the only other company I can say that about is SONOS. If you don’t have their music platform, you’re missing a treat.

Introducing new components into any "main product" can cause all sorts of problems with the pieces that used to work. If you don’t believe it, look at some of the "other forums" and look at the number of message threads complaining that the new X Widget broke the Y widget and now nothing works. While we can’t speak for everyone, I think it’s safe to say nobody that depends upon their phone system wants to see it go up in flames regularly because some developer had a great new idea that didn’t quite do what it was supposed to do.

To their credit, the XiVO developers were smarter than that. They’ve not only built a mighty mousetrap, but they’ve done it in a way that supports outside integration of additional components without breaking the main product. There are numerous "hooks" that allow anyone with any skill set to add missing pieces. Some of these hooks are exclusively for programmers, but many were designed to let anybody integrate almost anything into the XiVO platform.

So, when a user says "I wish XiVO had an IVR Builder in the GUI," our first inclination was to chuckle and respond with "You just don’t appreciate how lucky you are not to have an IVR Builder in the GUI." What the commenter didn’t appreciate is that you don’t need to pre-build components with XiVO before developing an IVR. With the "other" GUI, you first had to create Custom Destinations and Custom Contexts and Miscellaneous Applications and Miscellaneous Destinations and Custom Recordings in the GUI before you could take advantage of the IVR GUI to build much of anything. Think about that for a minute. Yes, there was an IVR builder but, before you could use it, you first had to transform every component to be incorporated into the IVR using a large number of subcomponents to translate all of your Asterisk pieces into the GUI’s special lingo. Think of them as GUI pigeonholes, and you had to decipher which Asterisk square pegs went in which GUI round holes. We can’t count the number of times we’ve begun the IVR creation process only to have to stop and create missing components because the IVR builder simply wouldn’t recognize a feature as being part of our Asterisk dialplan.

Building IVRs and AutoAttendants with XiVO

The anatomy of an IVR in Asterisk could not be more straight-forward. You have a prerecorded message that plays to the caller giving them choices from which to choose from a menu of selections. The caller presses one of the 12 keys on their phone, and the IVR goes off and does some task: calls an extension, plays a recording, runs an Asterisk application, makes an outside call, or kicks off another IVR with another recording and more choices. Some options in the IVR may not be mentioned, and this is commonly referred to as the Stealth AutoAttendant. None of this is rocket science.

To build an IVR, you need these components: (1) a prerecorded message, (2) a list of the choices you want to provide to the caller with the corresponding destinations on the PBX to execute those choices, and (3) a template to follow to create the IVR dialplan code in XiVO.

Trust us when we say the major problem with IVRs is not that they’re difficult to build in XiVO. The real issue with most IVRs is that the person that implemented the IVR spent all their time worrying about the mechanics of PBX implementation and didn’t put sufficient thought into the IVR layout and the caller’s experience when actually interacting with the IVR. If you haven’t heard Allison Smith speak about IVR design, put it on your Bucket List for the next AstriCon or do some reading. That’s a long-winded way of saying that filling in the blanks of an IVR template is just as easy as point-and-click or drag-and-drop except for the eye candy. Just be thankful the XiVO platform gives you the flexibility to do it yourself without having to create imaginary destination hooks and recording linkages before they can be used in the product’s IVR GUI because the developers didn’t have the foresight to think outside their own GUI’s box. Every Windows user can appreciate that problem.

For today, we’re assuming you’ve done your homework and have already sketched out the options you want to incorporate into your IVR or IVRs. No GUI can help with that! So we’ll pick up from there and show you how easy it is to incorporate your IVR design into XiVO.

Adding Prerecorded Messages in XiVO

For openers, you obviously need a recording to greet callers and tell them what their choices are when using your IVR or AutoAttendant. You can build these recordings yourself on the XiVO platform or, for a more professional IVR, you can send the text off to Allison Smith and let her record the voice prompts for you. Digium makes it easy. Visit their web site, type in the text, and you’ll have your recording in a couple of days. No, they’re not free, but they’re not expensive either.

Since we’re just getting started, let’s assume you want to create a recording prototype on your own to work out the kinks in your IVR first. Here’s how. We’re assuming you’ve already read the Nerd Vittles XiVO tutorial and put the Festival TTS platform in place. Next, log into your XiVO server as root. To keep things simple, let’s put the recordings in WAV format in the /var/lib/xivo/sounds/playback directory which is reserved for our custom recordings:

cd /var/lib/xivo/sounds/playback

To actually generate the sound file that Asterisk can play back, execute the command below after placing your text between the quotation marks and giving the sound file a name, e.g. ivr-number1.wav:

echo "Text goes here" | /usr/bin/text2wave -F 8000 -o ivr-number1.wav

Here’s an example:

echo "Thank you for calling. Press 1 for Tom, 2 for Dick, or 3 for Harry. Press 0 to be connected to the operator." | /usr/bin/text2wave -F 8000 -o ivr-number1.wav

Marrying IVR Choices to PBX Destinations

Whether you’re deploying an IVR using FreePBX® or XiVO, you still have to translate your Plain English options into code that the GUI understands so that calls get routed successfully to the intended destinations.

Let’s begin with the FreePBX Way. Our previous IVR tutorial showed how it was done:




As you can see from the above routing procedure, there were interim steps for every single option in this IVR menu except #8. What you may not appreciate is that you first had to create both a Misc Destination AND a Custom Extension before these options could be used in FreePBX. Otherwise, the options simply didn’t appear in the IVR GUI’s pull-down pick lists.




If you wished to incorporate a custom context that wasn’t assigned an extension number on your PBX, there was a different GUI procedure. For something as simple as retrieving the time of day, you had to get the custom context registered with FreePBX before the dialplan code could be used in the IVR. According to the FreePBX developers, this functionality was considered an "advanced feature and should only be used by knowledgeable users."



Our purpose in documenting all of this is to demonstrate that building IVRs even in a GUI is much more than point-and-click. It requires mastery of some fundamental Asterisk dialplan concepts not to mention the GUI’s own labyrinth of secret pigeonholes. Once you’ve had to master all of that, we believe it’s simpler to build IVRs using simple commands rather than jumping through all of the convoluted hoops required just to make your IVR GUI platform happy.

Let’s compare this methodology to the XiVO way of doing things by way of example. Then you can decide for yourself which approach is more complex. Would you know all of these on your own? Probably not. But now you can see how simple it really is. There really are only two words you need to learn: Dial and Goto. 🙂

Call an Extension: Dial(Local/701@default)
Call a Ring Group: Dial(Local/801@default)
Call a PSTN Number: Dial(Local/8005551212@default)
Call a SIP URI: Dial(SIP/2233435945@rentpbx.mundy.org)
Access DISA with permission: Dial(Local/3472@default)
Join a Conference: Dial(Local/2663@default)
Playback Yahoo News: Dial(Local/951@default)
Playback Weather Forecast: Dial(Local/947@default)
Identify IVR Option as Invalid and Repeat Menu: Goto(i,1)
Hangup on Caller for Choosing Invalid Option: Goto(t,1)
Execute Time of Day Custom Context: Goto(new-time,s,1)
Send Caller to a Second IVR and Play Second Recording: Goto(ivr-2,s,3)

Building XiVO IVRs from an IVR Template

We can’t speak for everyone, but we’ve always told folks not to write a book about how to do something. Just give us an example that’s easy to follow and we’ll take it from there. So here you go.

In the XiVO world, IVRs are nothing more than custom contexts. They have a name in [brackets], and they’re stored in config files saved in /etc/asterisk/extensions_extra.d. A config file can include multiple contexts or only one. For IVRs, we recommend you save each one in a single configuration file that houses a single context.

We’re going to give you a template to follow in creating all of the IVRs you can dream up. All you need is a custom recording for each one and your list of choices and destinations for those choices. The examples above tell you everything you need to know to build awesome IVRs.

After downloading the template, we recommend that you not edit it directly. Make a copy with a new file name and change the context name in the template to match your new file name. We also do one other little trick with all of our custom contexts. They always begin and end with comment lines like this using the context name:

;# // BEGIN ivr-template
;# // END ivr-template

The reason for this is it makes it incredibly easy to remove the entire context with a single command:

sed -i '\\:// BEGIN ivr-template:,\\:// END ivr-template:d' ivr-template.conf

This doesn’t matter so much when you only have a single context in a single file. But it is immensely helpful when you’ve stored dozens of contexts within the same file. Some may prefer to store all of the related IVR contexts for their entire IVR tree in a single file. And then you’ll appreciate this tip when it’s time to make major changes in your IVR.

Let’s begin by putting your template in place and then cloning it to ivr-number1:

cd /etc/asterisk/extensions_extra.d
wget http://incrediblepbx.com/ivr-template.tar.gz
tar zxvf ivr-template.tar.gz
rm -f ivr-template.tar.gz
cp -p ivr-template.conf ivr-number1.conf
sed -i 's|ivr-template|ivr-number1|' ivr-number1.conf

The rest of today’s exercise can be performed in the XiVO GUI using its built-in editor. Open the GUI with your browser and navigate to Services -> iPBX -> Configuration files and then open ivr-number1.conf by clicking on the pencil icon beside it.

Anatomy of the XiVO IVR Template

First things first. Change the sound recording in line s,3 to match the recording you made above without the .wav extension: ivr-number1. Leave the directory path just as it is. So your line should now look like this:

exten => s,3(skip),Set(IVR_MSG=/var/lib/xivo/sounds/playback/ivr-number1)

Next, take a look at the structure of the file. You’ll note that there are options labeled exten => 0,1, through exten => 9,1,. These match the numeric keys on a telephone obviously. In the IVR world, it’s called a phone tree. All you need to change is what comes after the second comma on each line. This destination should be one of the XiVO commands we documented above telling XiVO how to process the call. For option 0, let’s assume you wanted to route the call to extension 701. Your 0 branch would look like this:

exten => 0,1,Dial(Local/701@default)

The remaining dial options should be obvious. If you want to designate a particular option to be invalid, make the option look like this:

exten => 9,1,Goto(i,1)

Another alternative is to remove the line entirely; however, we prefer the above approach because it makes it easy to change things down the road if you decide to use option 9 as a call destination.

Two other options warrant a brief explanation. The i option tells XiVO how to process the call if the caller chooses an invalid option. The t option tells XiVO what to do if the 3-second timeout occurs without the caller pressing a key. You can modify these to meet your own requirements. As configured, an invalid option sends the caller back to the recording to start over. And the timeout option hangs up the call.




Finally, phone trees can get quite complex. A GUI can’t fix that either. Pressing option 2 might trigger phone tree 2 while pressing 3 might trigger phone tree 3. Programmers could obviously rewrite the dialplan to handle all of these separate phone trees with their separate branches in one giant, convoluted chunk of dialplan code. But why? Just make each phone tree a separate IVR housed in its own file with its own context. And navigate between the IVRs using simple Goto commands such as Goto(ivr-number2,s,3). To return to the main IVR, do the same thing pointing to the line number to which the call should be redirected, e.g. Goto(ivr-number1,s,3). You obviously don’t need to answer each call but once so skip those lines in the IVR dialplan when choosing the line number to which to redirect processing.

Routing Incoming Calls to Your IVR

If you’ve already set up one or more DIDs on your PBX, then you probably routed those Incoming Calls to a user or ring group. Changing the routing to send the calls to your IVR is easy. Just edit the DID entry for the Incoming Calls you wish to redirect and set the Destination to Customized and the destination Command to the context of your IVR: Goto(ivr-number1,s,1). Save your change and you’re all set. Remember, XiVO is a real-time Asterisk server so all of your changes take effect immediately. There’s no rewriting of the entire Asterisk dialplan. Enjoy!

Letting Callers Dial Extensions Within IVR

Some administrators prefer to let callers dial an extension directly while an IVR is playing. You can easily add this functionality in XiVO. This post on the PIAF Forum showed how. Simply edit /etc/asterisk/extensions_extra.d/ivr-1.conf and modify the code like this. Be sure to change the number of X’s in the last line to match the length of your extension numbers. Then reload your dialplan.

;exten => s,n,ExecIf($["${IVR_MSG}" != ""]?Background(${IVR_MSG}))
;exten => s,n,WaitExten(10,)
exten => s,n,Read(Digits,${IVR_MSG})
exten => s,n,Goto(${Digits},1)
exten => _XXX,1,Dial(Local/${Digits}@default)

Taking Nerd Vittles’ XiVO IVR for a Test Drive

There’s a Demo IVR running at www.pacificnx.com on their XenServer virtualization platform. Scott McCarthy, a leading outside XiVO developer and a principal at PacificNX, tells us they soon will have a $20 a month platform specifically tailored to XiVO. And that’s what you’ll be hearing when you call the Nerd Vittles Demo IVR:

Nerd Vittles Demo IVR Options
1 – Call by Name (say "Delta Airlines" or "American Airlines" to try it out)
2 – MeetMe Conference
3 – Wolfram Alpha (Coming Soon!)
4 – Lenny (The Telemarketer’s Worst Nightmare)
5 – Today’s News Headlines
6 – Weather Forecast (enter a 5-digit ZIP code)
7 – Today in History (Coming Soon!)
8 – Speak to a Real Person (or maybe just Lenny if we’re out)

Published: Thursday, May 26, 2016

UPDATE: The first release of Incredible PBX for XiVO is now available here. Please consider this article as a supplement to the new release.





Need help with Asterisk? Visit the PBX in a Flash Forum.


 

Special Thanks to Our Generous Sponsors


FULL DISCLOSURE: ClearlyIP, Skyetel, Vitelity, DigitalOcean, Vultr, VoIP.ms, 3CX, Sangoma, TelecomsXchange and VitalPBX have provided financial support to Nerd Vittles and our open source projects through advertising, referral revenue, and/or merchandise. As an Amazon Associate and Best Buy Affiliate, we also earn from qualifying purchases. We’ve chosen these providers not the other way around. Our decisions are based upon their corporate reputation and the quality of their offerings and pricing. Our recommendations regarding technology are reached without regard to financial compensation except in situations in which comparable products at comparable pricing are available from multiple sources. In this limited case, we support our sponsors because our sponsors support us.

BOGO Bonaza: Enjoy state-of-the-art VoIP service with a $10 credit and half-price SIP service on up to $500 of Skyetel trunking with free number porting when you fund your Skyetel account. No limits on number of simultaneous calls. Quadruple data center redundancy. $25 monthly minimum spend required. Tutorial and sign up details are here.

The lynchpin of Incredible PBX 2020 and beyond is ClearlyIP components which bring management of FreePBX modules and SIP phone integration to a level never before available with any other Asterisk distribution. And now you can configure and reconfigure your new Incredible PBX phones from the convenience of the Incredible PBX GUI.

VitalPBX is perhaps the fastest-growing PBX offering based upon Asterisk with an installed presence in more than 100 countries worldwide. VitalPBX has generously provided a customized White Label version of Incredible PBX tailored for use with all Incredible PBX and VitalPBX custom applications. Follow this link for a free test drive!
 

Special Thanks to Vitelity. Vitelity is now Voyant Communications and has halted new registrations for the time being. Our special thanks to Vitelity for their unwavering financial support over many years and to the many Nerd Vittles readers who continue to enjoy the benefits of their service offerings. We will keep everyone posted on further developments.
 



Some Recent Nerd Vittles Articles of Interest…

IVR 101: Six Quick Steps to Building Incredible IVRs for Asterisk with FreePBX

As more and more Asterisk® platforms enter the open source community, it seems as if we spend a lot of energy covering the basics of getting those new systems into place, and there’s little time left for tutorials that really make the difference in a great telephony system and one that just makes calls. So our New Year’s Resolution is to try to devote a column every month to smelling the roses and pushing out some information that actually helps newbies in the VoIP community learn something while getting them up to speed on creating important pieces of a PBX themselves.

For today, IVR 101 tackles Interactive Voice Response systems (IVRs) and AutoAttendants. These are the tools that let callers interact with a PBX without assistance from a receptionist. What’s the difference in an IVR and AutoAttendant? Both offer unattended call processing, but an IVR is more sophisticated typically offering much more than a menu tree of connection options to the caller. For example, some of the options in today’s demo IVR let the caller interact directly with the computer to retrieve customized responses. Call by Name lets the caller speak the name of a person or company to dial, Weather by City lets the caller choose the City and State, Province, or Country of a weather forecast to retrieve, and Wolfram Alpha lets the caller ask about almost anything you’d find in your favorite almanac. Twenty years ago, companies were spending $100,000+ to get this functionality from the Bell Sisters and companies like Nortel. Today you can do it with a Raspberry Pi or BeagleBone Black running Incredible PBX for less than $50. Much has been written about IVR Hell and how to build effective IVRs that don’t drive callers crazy. We’ll leave that one for you to explore on your own. But we can’t stress enough how important this really is. It can make or break a company! If you’re unwilling to invest the time in the IVR design, there are companies such as CallFire that will do it for you. For do-it-yourselfers, you’ll want to start with Allison’s 15 Commandments (for ease of reference, we have linked to the individual articles on Digium’s site below) and then do a little Googling on your own. There’s a wealth of information on the topic.

Allison’s 15 Commandments of IVR
 
1. Don’t Overestimate Your Listener’s Attention Span
2. Thou Shalt Not Create Fake Mailboxes
3. Keep Things Simple
4. Always Give Callers an Opt-”In”
5. Front-Load Important Information
6. Understand What Constitutes a “Prompt”
7. Understand The Effects of Proper Punctuation in Concatenation
8. Thou Shalt Not Give Directions To Your Office/Facility
9. Give a Pronunciation Guide for Proper Names and Place Names
10. Name Your Company Something That Needs No Special Instruction
11 Don’t Go Overboard with Niceties
12. Read The Copy Out Loud
13. Be Clear on Your Company’s Vision/Image — And Be Able To Explain That To Me
14. Don’t Front-Load Too Much Information in The Opening Greeting
15. Write in a Conversational Tone

Step #1: Documenting What You Want Your IVR to Do

Our task today is to cover the mechanics of building an effective IVR. That, of course, starts with a pencil and paper. Before you can build anything, you need a blueprint for what you’re trying to accomplish and how we go about getting there. What choices do you want to give callers that dial into your PBX? Do you want all of these options announced to every caller, or should some of them be left hidden (perhaps behind passwords) that let certain users interact with your PBX in ways that casual callers won’t know about. Keep in mind that the bad guys have telephones, too. So, even though an IVR option may not be mentioned, that doesn’t mean that the curious caller won’t push buttons you didn’t describe as available. Unless you have deep pockets, for example, you probably wouldn’t want to make a DISA call-out option available, whether hidden or otherwise, without protecting it with a very secure password. Similarly, an IVR option that lets anybody schedule a reminder to any phone number of their choice is not too smart.

Rule #1: The very first question you need to ask yourself with every IVR option is "Can this function end up costing me money?" If the answer is "yes" then you need a very secure password before any caller can access that feature.

For today, we’re going to build a call tree that shows off some of the features included in Incredible PBX. When a caller dials into a certain number on your PBX, we’ll play a message that describes the available options. Then we’ll let the caller play with the Incredible PBX feature set. You probably would want to set this system up on a phone number that supports unlimited inbound calls at no additional cost. In short, ask yourself: "Do thousands of 30-minute calls to my demo IVR end up costing me money?" If the answer is "yes" then don’t build a non-essential IVR without first securing a DID that doesn’t cost you by the minute. There are lots of choices including Google Voice which happens to still be free and available until May 15, 2014. There’s also IPkall that still gives out free DIDs in the Seattle area to anyone with a SIP URI. If you haven’t already guessed, we’re trying to get you in the mindset of always assuming the worst case from every potential caller. After all, it’s your phone bill.

We started with our pencil and paper and sketched out what we wanted to include in our Demo IVR. And, by the way, you would never want to position "speak to a real person" as the last option in a real IVR unless you just love pissing off your customers. Today’s IVR wasn’t designed to let you speak to a real person… other than Lenny. 😉

Test Drive: Demo IVR with Incredible PBX on the $45 BeagleBone Black RasPBX

Step #2: Recording the Voice Prompt for the Demo IVR

When people call your phone number, they expect someone to answer the call. In the case of an IVR or AutoAttendant, you’ll need a voice prompt to tell callers what options are available. The options need to be concise keeping in mind that the average attention span of callers is about 30 seconds. You don’t want callers hanging up before they’ve even reached the end of your schpeel. You also don’t want callers to have to listen to a dozen options when the option they wanted was #1. We’re going to be using FreePBX® to create the IVR so it will automatically permit callers to interrupt the talking head by pressing a button. If you’re doing this with Asterisk dialplan code, make sure you use the Background function to play your voice prompt rather than Playback which forces callers to listen to the entire recording before making a choice.

In recording voice prompts, you have a number of options. The most professional is to hire Allison to record the prompts for you. Then it matches all of the other prompts on your Asterisk system. You can do this through Digium’s web site, and the cost is quite reasonable. For bigger projects, contact Allison directly through her web site. Another alternative is to record the prompt yourself. This can be done with professional recording equipment or using an ordinary phone with FreePBX: Admin -> System Recordings -> Extension Number. Who knows? You may want to break into the voice-over business yourself.

The other alternatives involve use of a text-to-speech engine to create the voice prompts. A synthesized "Allison voice" is available from Cepstral®; however, due to a change in licensing, you now will need three different licenses in order to record voice prompts. If you want on-the-fly prompts using Cepstral, you also will need additional licenses for each simultaneous caller. Other than in the corporate environment, we can no longer recommend Cepstral. And, even for business use, Allison’s custom recordings are far superior to the TTS renditions in our opinion.

Two free text-to-speech alternatives are available on Incredible PBX platforms. Flite sounds much like Herman Munster. You can understand him. That’s about it. GoogleTTS is a female voice that actually does a good job. For demo projects, we typically use GoogleTTS although you won’t have to today. GoogleTTS voice prompts can be created from the command line by logging in as root. The following command would build an ivr.wav voice prompt for this demo IVR that is suitable for use on all Asterisk-based systems:

googletts-cli.pl -t "Hi: Thank you for calling. To call by name, press 1: To join the conference, press 2: For Wool From Alpha: press three: To speak to Lenny: press four: For today's news headlines, press 5: For today's weather forecast, press 6. For today in history, press 7. Or press 8 for the house phones and speak to a real person." -r 8000 -o ivr.wav

As a Christmas present to all of us, Allison has actually recorded the voice prompt for this demo IVR, and you are more than welcome to download it and use it in building a Demo IVR for your own computer. It provides a great example of the quality of Allison’s recordings. Night and day pretty much sums up the difference between Allison’s recording and the GoogleTTS version, but you can judge that for yourself. Here’s the download link for the ivr-Allison.wav prompt. And here’s the download link for the GoogleTTS ivr.wav prompt. Just import the files into FreePBX as outlined below.

Step #3: Importing the Voice Prompt into FreePBX

Before we actually create our IVR application in FreePBX, we first need to get our two voice prompts from Allison and GoogleTTS imported so that they can be used as part of the FreePBX system. There are two ways to do this. The first is to import a file from your desktop PC using the FreePBX GUI. We’ll use this to grab the Allison prompt you downloaded to your desktop above. Choose Admin -> System Recordings. Then Choose File -> ivr-Allison.wav -> Upload. Now Name the file: ivr-Allison and click Save.

The second option is to create a dummy IVR voice prompt in FreePBX and then replace the dummy ivr.wav file with your actual recording. Let’s create a dummy recording just to show you the procedure to use for GoogleTTS prompts. Choose Admin -> System Recordings. Enter an extension number that is connected to your PBX: 701 then click Go button. Using extension 701, dial *77 and record a few words of gibberish. Press # and hang up. Give the recording the same name as the file we wish to upload (without the extension): ivr. Click the Save button. Finally, from the directory on your Incredible PBX server where you recorded your GoogleTTS ivr.wav file in Step #2 above, move the ivr.wav file to its permanent location: mv ivr.wav /var/lib/asterisk/sounds/custom

Step #4: Creating the IVR in FreePBX

To create the IVR in FreePBX on the Raspberry Pi or BeagleBone Black platform, choose Applications -> IVR -> Add IVR and then fill in the blanks to match this template clicking the + button to add the necessary number of IVR options, SUBMIT your entries, and APPLY CONFIG to reload FreePBX. You will note that, for each of the applications, we already have created a Misc Destination within FreePBX so that it can be used as part of a FreePBX-generated IVR. If you’ve created your own dialplan or AGI applications, you would need to complete this step before creating your IVR. To use Allison’s prompt instead of the GoogleTTS prompt, simply change the top Announcement entry below from ivr to ivr-Allison. Then, Allison’s prompt will play when a call is first answered, and the GoogleTTS version will play for invalid, timeout, and repeat announcements. That makes it easy for you to compare the two alternatives.

Step #5: Linking the IVR to an Incoming DID in FreePBX

Finally, you’ll need a DID that folks can call to reach your IVR. We’ll assume you’ve already set that up on your PBX so all we need to do in FreePBX is create an Inbound Route to pass incoming calls to that phone number. Choose Connectivity -> Inbound Routes -> Add Incoming Route and fill in the blanks using the template below and the actual number of your DID. Click Submit and Apply Config to complete the process.

Step #6: Taking the Demo IVR for a Test Drive

This is a really important final step. ALWAYS try out every option on your IVR immediately after creating it. Be sure you call the IVR twelve times and press every button on your phone to make certain the results match what you expected to create. If not, edit the IVR in FreePBX and then try your calls again. As obvious as this sounds, you probably already know that many "professionally-built" IVR creations seem to have forgotten this step. We couldn’t begin to tell you the number of IVRs we have encountered with dead links, looping menus, and on and on. Do your callers a favor. Test your stuff before you put it in production.

Test Drive: Demo IVR with Incredible PBX on the $45 BeagleBone Black RasPBX


Another Banner Year at Nerd Vittles. As 2013 comes to a close, we want to thank our 500,000+ unique and very special visitors this year from 218 countries around the globe! With an average 5 million page views every month, it’s heartening to see the VoIP story spreading like wildfire. Are you listening VoIP merchants? We wish all of you a very Happy and Prosperous New Year and hope you will join us again in 2014 as the VoIP revolution marches on.

Originally published: Monday, December 30, 2013



Need help with Asterisk? Visit the PBX in a Flash Forum.


whos.amung.us If you’re wondering what your fellow man is reading on Nerd Vittles these days, wonder no more. Visit our whos.amung.us statistical web site and check out what’s happening. It’s a terrific resource both for all of us.


 

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…

Allison Smith: State of the IVR Address

We’re delighted to welcome Allison Smith as our first (and only) Guest Columnist. We had asked Allison to provide us an update on IVR technology, and she was gracious enough to accept our invitation. For most of our readers, Allison is best known for her pioneering work as the Voice of Asterisk®. But her accomplishments as the professional telephone voice for Verizon, Qwest, Cingular, Sprint, and Bell Canada among others are legendary. So… here’s Allison!

We’ve come a long way from the mindset of thirty years ago, where people approached the writing of their IVR prompts with the intention of guiding their callers through this strange, unfamiliar, automated land. Where we needed to point out that this is not an actual, live person speaking. Where we felt it was necessary to point out that if they simply listen to and follow these instructions, they will be rewarded with an answer, obeying an almost Oz-like mission, deciding which attribute best describes what you’re after and selecting the right department which will fulfill your dreams.

We are now so attuned to the idea of encountering an automated “gating” system when calling practically any entity – be they local dry cleaner or multinational – that we are in shock if the call is answered by an actual breathing person. Whereas before, designers of IVR trees were in the position of almost enticing or inviting the caller to “participate” in the exercise of finding the right department which best suits their needs, by now, everyone knows that this is a necessity to get where they want to go; and everyone knows the drill: I need to make a decision as to where my call should go – and it will be a big waste of my time if I choose incorrectly.

We’ve also come a long way towards streamlining and simplifying IVR instructions – through trial and error, we’ve got a clearer idea than ever as to the caller’s capacity for information – and their tolerance for time-wasting nonsense.
Instead of lengthy and complicated instructions on how clients can reach your physical location, I’m frequently voicing the phrase I’ve long campaigned for: “For directions to our facility, program our address into your GPS-enabled device…” Gone are hackneyed requests to “Please listen carefully, as our menu options have recently changed..” or “Please leave a detailed message after the tone…” (Nobody – especially first-time callers – care if your phone tree has changed. Also: people are well aware of what information to leave in a phone message.) And most importantly: I’m seeing a huge awareness in the fact that customers do not have an infinite amount of time or patience; get the callers sorted as efficiently and as quickly as possible, and be done with deluging them with too much information or anything which sounds even remotely like a commercial or sales pitch. They’ve been to your website. They’re sold on you. Now show them – through your phone tree – how effortless and easy it is to transact with you. –Allison Smith


 

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.
 



Originally published: Friday, February 22, 2013



Need help with Asterisk? Visit the PBX in a Flash Forum.

 


Some Recent Nerd Vittles Articles of Interest…

Introducing Incredible Pi: $35 for Asterisk, FreePBX & Google Voice Utopia

It’s Back-to-School Time in most of the United States, and the Nerd Vittles crew needed a good fall project to distract us from all of this year’s dreadful politicians. We feel like a kid in a candy store with our new $35 Raspberry Pi® Model B. Imagine squeezing a 700 mHz ARM processor with 256MB of RAM, 2 USB ports, a 10/100 Ethernet port,if an HDMI port, composite video, a separate audio jack, an SDHC card slot, and a micro USB port onto a motherboard the size of a credit card with a total weight of 1.6 ounces and a typical power draw of 3.5 watts. Thanks to Gernot and his Asterisk for Raspberry Pi project, a full LAMP stack with Asterisk® and FreePBX® gave us a head start on turning the Raspberry Pi into yet another Incredible PBX™ platform complete with Google Voice™ for free inbound and outbound calling throughout the United States and Canada.

Trust us when we say the performance of this $35 computer is nothing short of amazing. Can it do everything a $200 dual-core Atom PC can do? No. Can it do 90% of everything for someone whose requirements do not exceed a few simultaneous calls at a time but still wants a full-blown PBX for call routing, voicemail, IVRs, music on hold, and text-to-speech and speech-to-text apps for a home, a SOHO office, a Little League team, or a dorm room? Absolutely.

Call our Raspberry Pi at 1-843-284-6844 and check out the Incredible Pi Smörgåsbord for yourself.

Other Incredible Pi Resources: Quick Start Guide for Incredible Pi 3.1 and 35 Free Incredible Pi Apps Tutorial

Incredible PBX for Raspberry Pi: What’s Included

If you’ve never heard of The Incredible PBX, here’s the Top 20 for the Raspberry Pi platform. In addition to the base install with Debian 6, Asterisk 1.8, FreePBX 2.10, Apache, SendMail, MySQL, PHP, and phpMyAdmin, Incredible Pi offers the following built-in PBX components using a wired or wireless network connection:

Ordering Information: What It Takes to Get Started

A complete Incredible PBX build for the Raspberry Pi (Incredible Pi™) is finally finished, and we wanted to give you a head start on ordering the pieces you’ll need to get things going since there is a three to five week delay on some of the components due to huge demand. Nothing is ever just $35, of course. So here’s what you’ll need. The Raspberry Pi itself can be ordered from Newark or MCM. Delivery times and stock vary so check both sites. At the time we ordered, they were quoting 5 weeks. We actually got one from Newark in one week, and as of now MCM has some in stock for immediate shipping. You also need a power adapter. If you have a micro USB power brick for your cellphone, chances are it will work. As long as it’s at least 1 amp and 5 volts, you’re good to go. The recommended 700 mA adapters have reportedly caused issues for some folks so splurge and order a good one. They’re $10 from Amazon while supporting Nerd Vittles.1 If you plan to add the WiFi adapter covered below, you will need at least 1.2 amps to avoid lockups. Next, you’ll need an SDHC card which serves as your hard disk. Be very careful here. The Type 10 cards which arguably would provide the best performance turn out to be a nightmare. Many of them simply don’t work. For a basic system, we’d recommend you start with either the SanDisk 4GB or 16GB SDHC Type 4 card. The 4GB card is available almost everywhere for under $10, or you can order two from Amazon with free Prime shipping for about the same money. If you already have a USB keyboard and a monitor or TV with an available HDMI port or composite video and audio ports, then you’ve got everything you need to get started. Actually, you can do without the monitor and use SSH if you’re either using Incredible Pi 1.3 or if you can decipher the DHCP address of Incredible Pi by reviewing your firewall log. With version 1.3 and beyond, you can plug in a pair of earbuds, and the server will whisper your IP address in your ear after the boot process completes. By the way, you may also want to put your name in the queue for a Pibow case, completely unnecessary but very cute with a long waiting list. It costs almost as much as the computer.

For down the road, suffice it to say, you’re probably not going to want to run Asterisk, FreePBX, and Google Voice on a disk platform of 4 gigabytes although our demo system does exactly that. Between Debian 6.0, Asterisk 1.8, FreePBX 2.10 plus numerous Incredible PBX utilities, well over half of the available 4GB will be consumed by software. For distribution purposes, we’re providing an image that you can write directly to the SDHC card. Unfortunately, the image size determines the amount of space it will actually use on an SDHC card. We will cover below how you can install the 4GB image onto a 16GB card and then expand the size of the main partition to fill the remaining space on the card. But it wouldn’t make sense to distribute a 16GB image because of bandwidth issues. So we’d recommend you purchase a 16GB SanDisk Type 4 SDHC card for production use. Take our advice. Don’t get creative in choosing your SDHC card. Use the one that we’ve already tested and that we know works. If you want to skip the 4GB card completely, that’s perfectly fine, too. The 16GB Type 4 SanDisk card is under $10 from Amazon with free Prime 2-day shipping, or you can pay double and pick one up at your neighborhood Radio Shack store. We’ll also show you how to back up your SDHC card (any size) with your own settings and restore it onto a 16GB card without missing a beat. Unfortunately, once you migrate and expand the main partition on the 16GB card, you’re stuck with that topology. There’s no going back without starting over, and your backups will consume 16GB of storage rather than 4GB. But it sure is convenient… and easy. By the way, here’s a more reasonably priced case and here’s an awesome clear case if you just want something that’s functional.

Finally, you’re going to need an existing Linux server or Mac on which to create your bootable SDHC cards for use with Raspberry Pi. You’ll also need this server to make backups of your existing setup. DD is a wonderful low-level disk copying utility found in Linux, and we’re going to be using it a lot. PBX in a Flash with or without Incredible PBX makes an ideal platform because all of the necessary SDHC disk management utilities already are installed. If you’re not using our recommended Foxconn server, then you’ll need a server with an SDHC card slot, or you can purchase an inexpensive USB-to-SDHC adapter from Amazon for under $2. Without the case, you can build an awesome Asterisk platform for home or SOHO use for under $50, and it can handle 3 simultaneous SIP calls without noticeable degradation.

Here’s a shot of our favorite Incredible Pi setup. You’ll need the LAN cable for the initial boot so that you can SSH into the device to plug in your WiFi SSID name and password. You’ll need the earbuds for the first and second boot to decipher the IP address of the device on your LAN, wired and wireless. No monitor connection is ever required. Just log in with SSH from your Mac or PC. After the first two boots, you can dispense with the CAT5 cable and the earbuds. All of the components are covered in this article.


Creating a Bootable Incredible Pi SDHC Card

SanDisk SDHC Type 4 cards come pre-formatted so all you need to do is insert the card into the SDHC slot of your Asterisk server and reboot it. If you prefer to use a Mac, go here for the tutorial. Before you insert your SDHC card and reboot, log in as root and run the following command: fdisk -l. This will tell you what the existing disk topology of your server is. Write it down. What you don’t want to do is accidentally choose your main Linux drive as the device to copy the Incredible Pi image to, or you end up with a mess. Now insert your SDHC card and reboot your Asterisk server so your SDHC card will be visible. Then run fdisk -l again to decipher the device node of your card. It should be at the bottom of the list and will be something like /dev/sdb. We don’t use /dev/sdb1 in the dd transfer step below, just the base devnode: /dev/sdb or whatever letter your SDHC drive happens to be.

Next, using a web browser, download the latest Incredible Pi image and transfer it to the /root directory of the Linux computer you’ll be using to copy the image to your SDHC card. As we said, we recommend a PBX in a Flash server because it has all of the SDHC utilities already included. Incredible Pi is a free download from SourceForge. The feature sets are described in the SourceForge readme.txt file. Once you’ve copied the desired tarball to your Linux server, decompress it: tar zxvf incrediblepi-1.x.tgz where x is the version you downloaded. Verify the integrity of the image file using md5sum:


1.7: md5sum debian6-incrediblepi-10-09-2012.img => e601ecd890a400de2e03009c034353c2
2.1: md5sum debian7-incrediblepi-16-09-2012.img => 007efb9d2cdf86f054c5cf26c4f5de9a

Finally, run the Linux install script: ./make-sdhc. It takes about 30-60 minutes to copy the image to your SDHC card. If you have a Mac, copy make-sdhc-mac to your Downloads folder and use it.

While you’re waiting, you can read about all the latest changes and additions to Incredible Pi here.

If you’re using our recommended 16GB SanDisk Type 4 SDHC card, then what you have at this juncture is a 16GB card on which only 4GB is being used. Here’s how to expand the main partition to use the other 12GB of space on the card while logged in as root. First, we need to make sure your card’s geometry matches our card setup. From the command prompt, issue the following commands using the proper device node (/dev/sdb) of your card:

parted /dev/sdb
(parted) unit chs
(parted) print

Here’s what you should see:

If the geometry of your card doesn’t match what’s shown above, do NOT use our commands below to adjust your card. Instead, review the original tutorial explaining what needs to be done.

If your geometry matches our geometry above, issue the following commands while still in parted:

move 3 239943,0,0
[press enter to accept default End]
rm 2
mkpart primary 1232,0,0 239942,3,31
print

After entering the above commands, your new card geometry should look like this:

Now type quit. Then complete the resizing by issuing the following commands using your correct device node:

e2fsck -f /dev/sdb2
resize2fs /dev/sdb2
sync

Remove the card from your Linux machine and insert it into the SDHC card slot on the Raspberry Pi.

We’ve also found one 32GB Type 10 card that’s reliable, the Kingston Ultimate X (SD10G2/32gb) which costs about $40 at Amazon. We’ve included the resizing steps below:

fdisk -l
parted /dev/sdb
unit chs
print
move 3 483887,0,0
[press enter to accept End address]
rm 2
mkpart primary 1232,0,0 483886,3,31
print
quit
e2fsck -f /dev/sdb2
resize2fs /dev/sdb2
sync


Preparing the Raspberry Pi for Blastoff

Once the card is in place, there are a few more preliminary steps before you apply power to the device. Plug in a CAT5 LAN cable that is connected to your firewall-protected private network. Make certain that your router is handing out DHCP addresses properly since the Raspberry Pi can’t boot without a network connection to obtain the correct time from an NTP server on the Internet. It has no onboard time clock! Plug in a USB keyboard to one of the two USB ports on the Raspberry Pi. Connect either an HDMI or composite video cable between the Raspberry Pi and a monitor or TV. Finally, plug in a reliable power adapter and insert its micro USB connector into the slot on the Raspberry Pi. You should immediately see a raspberry on your screen with a scrolling list of commands that are executing while the Raspberry Pi is booting. Watch carefully. If you see a bunch of "waiting for hardware interrupt" notices, then you didn’t heed our advice on the type of SDHC card to use. Your card is not compatible for use on the Raspberry Pi so reformat it and use it with your camera. Then go buy the SanDisk card we recommended. The entire boot process should take about 30 seconds. With an incompatible card, that can stretch out to more than an hour. When the boot process completes, the IP address of your Incredible Pi should be displayed with a Linux login prompt. Write down your IP address. You’ll need it in a minute.

Securing Incredible Pi

Congratulations! You’re now ready to begin the Incredible Pi adventure. But, before we get started, first things first. Let’s secure your server. Log in with the username: pi. The password is raspberry. Now change the password to something really secure by issuing the command: passwd. Now do the same thing for the root password of the device: sudo passwd root.

Next, we need to set the default timezone on your machine for both Linux and PHP5. First, switch to the root user account so we don’t have to type sudo before each command: su root. Enter your new root password when prompted. Then run this command to set the default timezone with Debian: dpkg-reconfigure tzdata. For PHP5, you have to manually enter the timezone in the php.ini file: nano -w /etc/php5/apache2/php.ini. Press Ctrl-W to search for timezone. Be sure the line is uncommented and plug in your correct timezone. If you don’t know the magic words to use for your timezone, here’s the list. Save the file: Ctrl-X, Y, and press Enter. Now restart Apache: service apache2 restart.

First, we need to remove the default DUNDI secrets from Asterisk so fresh ones can be automatically generated when you restart Asterisk.

asterisk -rx "database del dundi secret"
asterisk -rx "database del dundi secretexpiry"
amportal restart

Now we need to do the same thing for your SSH keys:

rm /etc/ssh/ssh_host_* && dpkg-reconfigure openssh-server

Now let’s be sure Asterisk is up and running. Then you can continue your adventure using a web browser and the FreePBX GUI. Before we switch, start up the Asterisk CLI: asterisk -rvvvvvvvvvv. Verify that Flite is functioning for TTS: core show application like flite. And make sure the MySQL components are in place to support CDR reporting: module show like mysql. Finally, let’s verify that Jabber is alive and well even though we haven’t set up any Google Voice accounts yet: jabber show connections.

Finally, a few words of warning about security. Incredible Pi is designed to run behind a hardware-based firewall with no Internet exposure to the server itself. Don’t cheat! Prior to the 1.2 release, there are no security mechanisms in place: no IPtables firewall and no Fail2Ban. Beginning with Incredible Pi 1.2, the Linux firewall (iptables) is included, but our recommendation still stands unless you are using the preinstalled Travelin’ Man 3 to enable access of a remote phone connection to your PBX.

All builds do include Suhosin which has been properly configured to facilitate use of phpMyAdmin with MySQL. Within FreePBX, you can secure extensions with strong passwords and IP address filtering, and you need to do that. Exposing Incredible Pi‘s web server to Internet access would be an open invitation to an expensive phone bill. Don’t do it! You’ve been warned.

Securing Incredible Pi with Travelin’ Man 3

Travelin’ Man 3 is a collection of programs that implement firewall whitelists (safe IP addresses) using the Linux firewall, iptables. Before you ever expose your server to any kind of Internet access, read the Nerd Vittles Travelin’ Man 3 article. As delivered with Incredible Pi 1.2 and later, iptables is configured to block all access to your server except from non-routable IP addresses (typically used on LANs sitting behind hardware-based firewalls). The one exception is SIP and IAX access from VoIP Trusted Providers. This allows you to add trunks to your server from these providers without touching your firewall settings.

There are instances in which you may actually need to connect your server from a public Internet site. For example, if you travel for a living and want to use a softphone connected back to your server from a distant hotel room or customer site, you would need access through both your hardware-based firewall and iptables. If one of your children is away at school and needs a free telephone connection, this might also warrant a change in your firewalls. Because of the low cost of a Raspberry Pi, we still believe AND RECOMMEND that you use separate servers to meet remote requirements.

If you still believe remote access is necessary after reading the Travelin’ Man 3 article, then the tools are available by logging into your Incredible Pi server as root and changing to the /root directory. Here are the four apps:

For whiz kids only, Debian manages iptables quite differently than what you may be accustomed to on the CentOS platform. Debian stores iptables rules in /etc/network/iptables. You can reload the iptables rules like this: iptables-restore /etc/network/iptables. And you can display the rules currently in effect like this: iptables-save. Be careful!


Configuring Incredible Pi with FreePBX

Now we’re ready to configure Incredible Pi so that you can start making and receiving calls. We’ll be using the FreePBX web GUI. To begin, using a browser on your desktop, access Incredible Pi by pointing to the IP address of your server (that you wrote down above). Choose FreePBX Administration at the main menu. When prompted for your username and password, enter admin for both.

If you’re new to Asterisk, here’s the one paragraph primer on what needs to happen before you can make free calls with Google Voice. You’ll obviously need a free Google Voice account. This gets you a phone number for people to call you and a vehicle to place calls to plain old telephones throughout the U.S. and Canada at no cost. You’ll also need a softphone or SIP phone to actually place and receive calls. YATE makes a free softphone for PCs, Macs, and Linux machines so download your favorite and install it on your desktop. Phones connect to extensions in FreePBX to work with Incredible Pi. Extensions talk to trunks (like Google Voice) to make and receive calls. FreePBX uses outbound routes to direct outgoing calls from extensions to trunks, and FreePBX uses inbound routes to route incoming calls from trunks to extensions to make your phones ring. In a nutshell, that’s how a PBX works. There are lots of bells and whistles that we will cover later.

Before you do anything else, change your admin password to access FreePBX. From the main FreePBX GUI, choose Admin => Administrators. Next, set your default email address at the bottom of Settings -> General Settings.

So here’s our 7-Step Checklist to set things up. After you complete these steps, you can start making free calls throughout the U.S. and Canada. And people can call you using your new Google Voice number.

1. Create a free Google Voice account
2. Set up Extension to connect to softphone
3. Create a Google Voice Trunk using GV credentials
4. Create an Inbound Route from Google Voice to Extension
5. Create an Outbound Route from Extension to Google Voice
6. Download and Configure YATE softphone
7. Make Your First Call

Creating a Free Google Voice Account

You’ll need a dedicated Google Voice account to support Incredible Pi. The more obscure the username (with some embedded numbers), the better off you will be. This will keep folks from bombarding you with unsolicited Gtalk chat messages, and who knows what nefarious scheme will be discovered using Google messaging six months from now. So keep this account a secret!

We’ve tested this extensively using an existing Gmail account, and inbound calling is just not reliable. The reason seems to be that Google always chooses Gmail chat as the inbound call destination if there are multiple registrations from the same IP address. So, be reasonable. Do it our way! Set up a dedicated Gmail and Google Voice account, and use it exclusively with Incredible Pi. Google Voice no longer is by invitation only so, if you’re in the U.S. or have a friend that is, head over to the Google Voice site and register. Don’t use funky characters in your Google password! If you’re living on another continent, see MisterQ’s posting for some setup tips.

You must choose a telephone number (aka DID) for your new account, or Google Voice calling will not work… in either direction. Google used to permit outbound Gtalk calls using a fake CallerID, but that obviously led to abuse so it’s over! You also have to tie your Google Voice account to at least one working phone number as part of the initial setup process. Your cellphone number will work just fine. Don’t skip this step either. Just enter the provided 2-digit confirmation code when you tell Google to place the test call to the phone number you entered. Once the number is registered, you can disable it if you’d like in Settings, Voice Setting, Phones. But…

IMPORTANT: Be sure to enable the Google Chat option as one of your phone destinations in Settings, Voice Setting, Phones. That’s the destination we need for Incredible Pi to work its magic! Otherwise, all inbound and outbound calls will fail. If you don’t see this option, you may need to call up Gmail and enable Google Chat there first. Then go back to the Google Voice Settings.

While you’re still in Google Voice Settings, click on the Calls tab. Make sure your settings match these:

  • Call ScreeningOFF
  • Call PresentationOFF
  • Caller ID (In)Display Caller’s Number
  • Caller ID (Out)Don’t Change Anything
  • Do Not DisturbOFF
  • Call Options (Enable Recording)OFF
  • Global Spam FilteringON

Click Save Changes once you adjust your settings. Under the Voicemail tab, plug in your email address so you get notified of new voicemails. Down the road, receipt of a Google Voice voicemail will be a big hint that something has come unglued with Incredible Pi.

Configuring an Extension to Use with a SIP Phone

As mentioned, an Extension is the component in FreePBX that actually interfaces with a telephone. Whether to use a hardware-based phone or a softphone is your choice. Without an adapter, POTS phones won’t work with Incredible Pi. You’ll need a SIP phone. We’ll set up a softphone today to get you started, but first we need to configure an extension in FreePBX. We’ve actually made one for you to use, extension 701. So, rather than create a new one, let’s just modify the one that’s already in place. You can add additional extensions later to support additional phones.

From the main FreePBX GUI, choose Applications -> Extensions. Then click on 701 in the Extension List on the right side of your display. You’ll see a form that looks like this:

For now, we only need to make a few changes. First, you need a very secure password for both the extension itself and your voicemail account for this extension. The extension secret needs to be a combination of letters and numbers. The Voicemail Password needs to be all numbers, preferably six or more. Replace the existing 1234secret and 1234 with your own (very secure) entries. You also need to lock down this extension so that it is only accessible from devices on your private LAN. You do that with the deny and permit entries which currently are filled with zeroes. Leave the deny entry the way it is which tells Incredible Pi to block everybody except those allowed in the permit entry below. For the permit, we need the first three octets of your private LAN address, e.g. if your LAN is 192.168.0.something then the permit entry will be 192.168.0.0/255.255.255.0.

Finally, you need to plug in your actual email address in the Voicemail section so that voicemails can be delivered to you when someone leaves a message. You can also include a pager email address if you want a text message alert with incoming voicemails. If you want the voicemails to automatically be deleted from the server after they are emailed to you (a good idea considering the disk storage limitations of an SDHC card), change the Delete Voicemail option from No to Yes. That’s it. Now save your settings by clicking the Submit button. Then reload the dialplan by clicking on the red prompt when it appears.

In case you’re curious, unless you’ve chosen to automatically delete voicemails after emailing them, you can retrieve your voicemails by dialing *98701 from any extension on your phone system. You’ll be prompted to enter the voicemail password you set up. In addition to managing your voicemails, you’ll also be given the opportunity to either return the call to the number of the person that called or to transfer the voicemail to another extension’s voicemail box. And you can always leave a voicemail for someone by dialing their extension number preceded by an asterisk, e.g. *701 would let someone leave you a voicemail without actually calling you.

Activating a Google Voice Trunk in FreePBX

To create a Trunk in FreePBX to handle calls to and from Google Voice, you’ll need three pieces of information for the Google Voice account you set up above: the 10-digit Google Voice phone number, your Google Voice account name, and your Google Voice password. Once you have these in hand, choose Other -> Google Voice from the FreePBX GUI. The following blank form will appear:

Fill in the blanks with your information and check all 3 boxes. If your Google Voice account name ends in @gmail.com, you can leave that out. Otherwise, include the full email address. Then click Submit Changes and reload your dialplan when prompted.

There’s one more step or your Google Voice account won’t work reliably with Incredible Pi! From the Linux command prompt while logged into your server as root, restart Asterisk: amportal restart

Creating an Inbound Route for Your Google Voice Trunk

Now that you’ve created your Google Voice Trunk, we need to tell FreePBX how to process the call when someone dials your Google Voice number. There are any number of choices. You could simply ring an extension. Or you could ring multiple extensions by first creating a Ring Group which is just a list of extension numbers. Or you could direct incoming calls to an Interactive Voice Response (IVR) system (we’ve actually set one up for you to play with). For the time being and since you only have one extension at the moment, let’s just route incoming Google Voice calls to extension 701.

To do this, you create an Inbound Route based upon the DID (phone number) of the Google Voice trunk. In FreePBX, choose Connectivity -> Inbound Routes. Fill in the form so that it looks like the example below using your own 10-digit Google Voice description and number instead of Atlanta GV and 6781234567. Be sure to set the Destination.

Then click Submit. But, before you reload the dialplan, make one change to the form. Click on the CID Lookup Source pull-down menu and choose CallerID Superfecta. This tells FreePBX to actually add names to phone numbers when someone calls. Now click Submit again and reload the dialplan when prompted.

Creating an Outbound Route for Google Voice Calls

FreePBX is actually smart enough to create an outbound route for your new Google Voice trunk so that you can place calls from any extension by dialing either a 10-digit number or 1 plus a 10-digit number to call anyone in the U.S. or Canada. If that’s all you care about, you can skip to the next section. But there’s more.

You can have more than one Google Voice trunk with Incredible Pi, and each one could be in a different area code. For example, you may do business in many different places and would like a local number for folks to call. Or Grandma may live in a distant city, and you’d like her to be able to call you without paying long distance charges. Then there are the kids. If you have three, you might want to give each of them their own Google Voice number which would ring just their phone. And, for outbound calls, you’d like each of them to use their own Google Voice trunk. All of these options are possible with Incredible Pi.

For outbound calls with multiple Google Voice trunks, you need a way to tell the system which trunk to use. We recommend dial prefixes that identify the city of the trunk, e.g. ATL, NYC, MIA. Or, for the kids, a dial prefix made up of initials, e.g. KHM, RWM, JSM. These dial prefixes get stripped off before the call is actually placed so the prefix is only used to determine the trunk used for placing the call.

To implement dial prefixes, you’ll need to adjust the default entries for your Google Voice Outbound Routes by adding the prefix option as an additional Dial Pattern. Here’s an example using an Atlanta Google Voice trunk where we want to allow a prefix of ATL-XXX-XXX-XXXX to force a call to go out on the Atlanta Google Voice trunk:

Another option may be appealing if you happen to make a lot of international calls and don’t want to pay for them. First, you can read all about iNum calling in this Nerd Vittles article. Another hidden feature in Google Voice is the ability to place iNum calls worldwide at no cost. To implement this, you’ll need to add another Dial Pattern to your Google Voice trunk. Prepend: 8835100 with Match Pattern: XXXXXXXX. Now you can dial iNum DIDs by dialing just the last 8 digits using any phone on your server. For example, try out the Nerd Vittles’ Dictionary Demo by calling 09901997. There also are a huge number of iNum Access Numbers that will let you call back to your server or any other iNum DID from almost anywhere in the world at no cost. These are covered in the Nerd Vittles article as well.

Configuring a YATE Softphone

As we mentioned, the easiest way to get started with Incredible Pi is to set up a YATE softphone on your Desktop computer. Versions are available at no cost for Macs, PCs, and Linux machines. Just download the appropriate one and install it from this link. Once installed, it’s a simple matter to plug in your extension 701 credentials and start making calls. Run the application and choose Settings -> Accounts and click the New button. Fill in the blanks using the IP address of Incredible Pi, 701 for your account name, and whatever password you created for the extension. Click OK.

Once you are registered to extension 701, close the Account window. Then click on YATE’s Telephony Tab and place your first call. It’s that easy!

Configuring Email Messaging

Incredible Pi comes preconfigured with SendMail to provide reliable delivery of outbound email messages. You can test it by logging in and issuing the following command using your own email address instead of yourname@gmail.com:

echo "test" | mail -s testmessage yourname@gmail.com

If you don’t receive the message, chances are that your Internet Service Provider blocks downstream mail servers from sending email to reduce spam. To fix it, the simplest way is to configure SendMail to use your ISP as the smart relay host for outbound mail, e.g. with Comcast, it’s smtp.comcast.net. It takes about 10 seconds to configure. After logging in as root, edit /etc/mail/sendmail.cf. Change line 116 from DS to DSsmtp.comcast.net using the SMTP gateway domain of your ISP. Save your change and restart SendMail: service sendmail restart. Then send another test message to make sure it works. If that fails, you can use Gmail as the mail relay. Here’s how. Now voicemail messages delivered directly to any email account by inserting your email address in the Voicemail section of the extension accepting your voicemail messages.

Configuring SMS Messaging

Incredible Pi also allows you to dictate messages and deliver them to any phone which accepts SMS messages. Just dial S-M-S (767) from any extension on your server. In addition, you can use Incredible Pi’s Message Blaster to send SMS messages to a group of individuals, e.g. a Little League team. In order to use SMS messaging, you must have at least one Google Voice account configured on your server. Then it’s a simple matter of inserting your Google Voice account name and password in two files. First, edit extensions_custom.conf in /etc/asterisk. On the second line of the 767 extension, replace acctname with your Google Voice account name (without @gmail.com). On the third line, replace acctpass with your Google Voice password for this account. Reload your dialplan to activate the new settings:

asterisk -rx "dialplan reload"

For the message blasting service, change to the /root directory. Insert the numbers to be dialed in the smslist.txt file following the example in the file. Enter the SMS message to be sent in smsmsg.txt keeping in mind that many phone providers limit SMS messages to 140 characters or less. Finally, insert your Google Voice account name (with @gmail.com) and password in smsblast. To kick off an SMS message blast, just issue the command: ./smsblast.

Configuring SAMBA for Windows Networking Support

Beginning with Incredible Pi 1.4, SAMBA is included in the distribution for transparent access using the Windows Networking Protocol from PCs, Macs, and other Linux machines. As delivered, SAMBA is deactivated. For obvious reasons, we recommend you never activate root login access to SAMBA. If you wish to enable SAMBA on your server, here are the steps while logged in as root:

  • 1. Set SAMBA password for user pi: smbpasswd -a pi
  • 2. Change Windows workgroup from WORKGROUP, if needed: nano -w /etc/samba/smb.conf
  • 3. Manually start SAMBA from command prompt: service samba start
  • 4. Set SAMBA to start on boot: rcconf and activate SAMBA option with space bar
  • 5. reboot

A Word of Warning: We’ve apparently reached the end of Memory Lane with SAMBA. Only activate it permanently (#4) after thoroughly testing it (#3) in your environment. We have found TTS IVRs in particular to be less than stable with SAMBA running.

Troubleshooting Audio Problems with Phone Calls

For most good routers/firewalls, there should be no problems connecting calls with Google Voice or SIP calls inbound or outbound. If you place a call and the audio is missing in one or both directions or your end of the call continues to ring even after the other person has answered, these are telltale signs of NAT and RTP connection issues. The quick fix is to plug in your public IP address and private LAN information under Settings -> Asterisk SIP Settings -> NAT Settings in FreePBX. If you continue to have connectivity issues, post the symptoms of your problem on the PIAF Forum and one of our helpful gurus will offer additional suggestions. Be sure to include the make and model of your router/firewall.

Using AsteriDex

Incredible Pi includes a robust phonebook application that uses MySQL for storage. You can access it with a browser by pointing to the following link using the IP address of your own server: http://192.168.0.185/asteridex4. Some entries for your favorite airlines are included to get you started. You can add, change, and delete entries under the Admin panel.

By dialing 411 from any phone on your system, you can speak the name of any entry in your AsteriDex database, and Incredible Pi will look up the name and dial the number. Try American Airlines just for fun.

Managing CallerID Superfecta

What began with our first release of CallerID Trifecta many years ago now has grown into one of the best examples of collaborative computing in the open source community. Maintained by the PBX Open Source Software Alliance, CallerID Superfecta now performs a number of functions in addition to matching names against phone numbers. Today you can display incoming call alerts and pop-ups on all sorts of devices in your home or office including XBMC, SqueezeBox, Winunciator, and many more. You can tailor CallerID Superfecta to meet your own local needs by opening the Default Superfecta tab under Other -> CallerID Superfecta in FreePBX. As with all database lookups, they take time. So keep in mind that you are trying to find the best match for inbound calls that takes the least time to retrieve corresponding CNAM information for the caller. To facilitate your search for the perfect combination, CallerID Superfecta includes a testing facility which will report the time required for each lookup. Then you can sort your lookup sources accordingly. To follow the latest developments, visit this thread on the PIAF Forums.

Adding Wireless Network Support

Particularly with a device the size of the Raspberry Pi, you may find it more convenient to place the unit on a bookshelf where a wired network connection is not feasible. This setup already is included in Incredible Pi 1.1 and later. For those using the 1.0 release, here’s how to use your Raspberry Pi wirelessly. First, order a TP-Link TL-WN722N USB 802.11n WiFi Adapter from Amazon for under $20. You won’t need a USB extender cable. This device can easily be plugged into one of the two USB slots without jeopardizing your ability to also connect a USB keyboard. Be sure your 5V power adapter is rated at 1.2 amps or greater to avoid lockups!2

We recommend the 1.3 Incredible Pi release or later if you plan to go the wireless route. All of the wireless networking components already are in place. Log into Incredible Pi as root (or su root for purists) and edit /etc/wpa.conf. Insert the SSID name and password for your wireless access point. Then reboot your server and wireless networking "just works."

Beginning with the 1.3 release, support has been added for the ultra-tiny AirLink 101 Wireless N adapter (AWLL5088). The setup process is identical to the 1.1 setup above. Just edit /etc/wpa.conf and insert the SSID name and password for your wireless access point. We strongly recommend disabling network connections that you aren’t using, e.g. eth0 and wlan0 if you go the AirLink 101 route. Just edit /etc/network/interfaces and comment out the eth0 line as well as the block of commands pertaining to wlan0. Then reboot, a process that now will be much quicker. If you plug in earbuds when you reboot, Incredible Pi 1.3 or later will read you the DHCP-assigned IP address when the boot process finishes so you no longer need a monitor. SSH can be used to connect to your server from any desktop PC or Mac.

Adding a PPTP VPN Client to Incredible Pi

If you’ve followed the Nerd Vittles tutorial and previously set up a PPTP VPN Server for your devices, then it’s pretty simple to add Incredible Pi to the mix by activating a PPTP VPN client. It’s only a few steps. You’ll need the FQDN or public IP address of your VPN server as well as a username and password for VPN access to your VPN server. Once you have those in hand, log into Incredible Pi as root.

Lest we forget to mention, you cannot log into your PPTP server from an IP address on the same private LAN so you’ll need to take your Incredible Pi device to a neighbor’s house to test this.

If you’re using Incredible Pi 1.5 or later, all of the PPTP VPN client software already is in place. Edit the connection template: nano -w /etc/ppp/peers/my-pptp-server. Insert the following text and replace myfqdn.org with the FQDN of your PPTP server, replace myname with your PPTP username, and replace mypassword with your PPTP password. Then save the file: Ctrl-X, Y, then Enter.

Now activate the PPTP VPN client. On your Incredible Pi server, run rcconf. If you’re using a release prior to 1.4, you’ll need to install rcconf first with the command: apt-get install rcconf. Scroll to the bottom of the list until you’ve highlighted pptp. Press the space bar to select it for automatic startup when you boot your server. Then tab to OK and press Enter.

To test it, issue the following command: /etc/init.d/pptp start. When you run ifconfig, you should now see a ppp0 entry:

ppp0 Link encap:Point-to-Point Protocol
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Remember, it won’t show an IP address if the Raspberry Pi and your PPTP VPN Server are on the same subnet (like ours). Once you install your Raspberry Pi in a remote location, you now can access it at the first IP address in your reserved PPTP IP address pool.

Power Adapters: The Hidden Gotcha

We’ve learned a lot about power adapters since acquiring the Raspberry Pi. First, not all adapters are created equal. Second, the type adapter you require depends upon what you’ve plugged into those USB ports. If one of the residents is a WiFi adapter, then the power draw of the WiFi adapter can add an additional wrinkle.

Here’s what we’ve found. If you decide to use the TP-Link TL-WN722N adapter, you’ll need a power adapter rated for at least 5V, 1.2 amps. These are few and far between and many adapters rated at even higher amperages (and not U/L approved) still won’t keep your RasPi from crashing regularly. We have had good results with $9.99 RND Power Solutions 2.1A Dual USB AC Adapter so long as you use the USB port closest to the red light and leave the second USB unoccupied.

If you use the AirLink 101 WiFi adapter or no WiFi adapter, then a less expensive 5V, 1A adapter may suffice. They’re typically about half the price, but some users have reported issues. For testing results and details, see this thread.

We’ve tested these adapters, and they both work. We can also count on both hands the number of adapters we tested that fail to keep the Raspberry Pi functioning. If you have a 1.2+ amp adapter from a reputable tablet computer, that will probably work as well. These replacement adapters tend to cost $25 or more. So the choice is yours. If your Raspberry Pi experiences frequent lockups, then an underperforming power adapter is the likely culprit, not the Raspberry Pi itself.

VoIP Redundancy: Use It to Your Advantage

As much as we love Google Voice, things do go wrong from time to time. The real beauty of VoIP telephony is there’s absolutely no reason to put all of your eggs in one basket. Multiple providers don’t cost you much particularly if you don’t use them regularly. And, when things go wrong, you won’t have to scramble to continue making phone calls. Vitelity has been a generous, long-term supporter of Nerd Vittles and our projects. You’ll find a compelling offer below, and we encourage you to consider them. Here’s the Incredible PBX Top 20 Trunk List with some reasons why these providers made our short list:

  • AxVoice ($14.99/mo. Business Plan; $16.58/mo. Unlimited Calls to 45 Countries)
  • CallCentric (Good International Calling Rates; Free iNum DID)
  • DIDforSale (20 channels per DID; unlimited DID calls for $8.99/mo.)
  • ENUM
  • FlowRoute (Good International Calling Rates)
  • FreeNum
  • Future-Nine (Supports CallerID Spoofing)
  • Google Voice (Free DIDs and free U.S./Canada calling)
  • IPkall (Free SIP/IAX DIDs)
  • Les.net (Supports CallerID Spoofing; very low rates)
  • LocalPhone (Dirt-cheap DIDs and calling rates worldwide; Free iNum DID)
  • Simon Telephonics (Free SIP-to-GoogleVoice Gateway)
  • SIPgate (Free residential DIDs sometimes)
  • Skype (Free Skype-to-Skype calls worldwide)
  • Teliax (Unlimited inbound DID $5/mo.)
  • Vitelity (Our supporter and the Best in the Business!)
  • VoIPms (CallerID spoofing; Free iNum calling; Very low rates)
  • VoIPMyWay (Residential Unlimited: $15.50/mo. Business Unlimited: $40/mo.)
  • VoIPStreet (Free DID)

Making Backups of Incredible Pi

Last, but not least, you’ll need to make periodic backups of your Incredible Pi system unless you don’t mind starting over when disaster strikes. It’s easy using almost any Linux server, and it’s especially easy with a PBX in a Flash server.

To begin, shutdown your Incredible Pi server gracefully: sudo shutdown -h now. Once the display shows that the system has halted, unplug it and remove the SDHC card. Then insert the SDHC card into the slot or reader on your PIAF system and reboot the server. Log into your server as root and issue the fdisk -l command to decipher the devname of your SDHC disk, e.g. /dev/sdb. To make a backup of your SDHC card, issue the following commands using today’s date and the proper devname for your SDHC drive:

dd if=/dev/sdb of=/root/incrediblepi-08-20-2012.img
sync
gzip /root/incrediblepi-08-20-2012.img

When the process is finished, you’ll have a compressed image roughly one-third the size of your SDHC card.

Firmware and Kernel Updates

Only after making a backup, you may find it helpful to upgrade your Raspberry Pi firmware and kernel from time to time. Releases of Incredible Pi below 1.4 do not have the firmware updating tool in place. So you’ll first have to install it. Log into your server as root and issue these commands:

wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update
chmod +x /usr/bin/rpi-update

You can decipher the kernel currently running on your Raspberry Pi by issuing the command: uname -a

To determine GPU’s firmware version, issue the command: /opt/vc/bin/vcgencmd version

Once the updater has been installed (and after you’ve made a backup!), you can update your Raspberry Pi’s kernel and firmware to the latest and greatest by issuing the following commands while logged in as root. The latest kernel addresses some issues with the USB ports and is worth installing: raspberrypi 3.2.27+ #66 PREEMPT Fri Aug 24 with GPU firmware version 332937.
rpi-update
reboot


Don’t forget to List Yourself in Directory Assistance so everyone can find you by dialing 411. And add your new number to the Do Not Call Registry to block telemarketing calls. Or just call 888-382-1222 from your new number.

Originally published: Monday, August 20, 2012

Continue Reading… Incredible PBX for Raspberry Pi Turns 21


Support Issues. With any application as sophisticated as this one, you’re bound to have questions. Blog comments are a terrible place to handle support issues although we welcome general comments about our articles and software. If you have particular support issues, we encourage you to get actively involved in the PBX in a Flash Forums. It’s the best Asterisk tech support site in the business, and it’s all free! In fact, there is a thread dedicated to support of Incredible Pi. Please have a look and post your support questions there. Unlike some forums, ours is extremely friendly and is supported by literally hundreds of Asterisk gurus and thousands of ordinary users just like you. You won’t have to wait long for an answer to your question.

Bug Fixes. A few bugs are to be expected. If you’re using Incredible Pi, please review these on the PIAF Forum. A serious problem with IPtables has now been fixed in Incredible Pi 1.5. A patch for previous versions is on the forum.


Astricon 2012. Astricon 2012 will be in Atlanta at the Sheraton beginning October 23 through October 25. We hope to see many of you there. We called Atlanta home for over 25 years so we’d love to show you around. Be sure to tug on my sleeve and mention you’d like a free PIAF Thumb Drive. We’ll have a bunch of them to pass out to our loyal supporters. Nerd Vittles readers also can save 20% on your registration by using coupon code: AC12VIT.



Need help with Asterisk? Visit the PBX in a Flash Forum.


whos.amung.us If you’re wondering what your fellow man is reading on Nerd Vittles these days, wonder no more. Visit our new whos.amung.us statistical web site and check out what’s happening. It’s a terrific resource both for us and for you.


 

Special Thanks to Our Generous Sponsors


FULL DISCLOSURE: ClearlyIP, Skyetel, Vitelity, DigitalOcean, Vultr, VoIP.ms, 3CX, Sangoma, TelecomsXchange and VitalPBX have provided financial support to Nerd Vittles and our open source projects through advertising, referral revenue, and/or merchandise. As an Amazon Associate and Best Buy Affiliate, we also earn from qualifying purchases. We’ve chosen these providers not the other way around. Our decisions are based upon their corporate reputation and the quality of their offerings and pricing. Our recommendations regarding technology are reached without regard to financial compensation except in situations in which comparable products at comparable pricing are available from multiple sources. In this limited case, we support our sponsors because our sponsors support us.

BOGO Bonaza: Enjoy state-of-the-art VoIP service with a $10 credit and half-price SIP service on up to $500 of Skyetel trunking with free number porting when you fund your Skyetel account. No limits on number of simultaneous calls. Quadruple data center redundancy. $25 monthly minimum spend required. Tutorial and sign up details are here.

The lynchpin of Incredible PBX 2020 and beyond is ClearlyIP components which bring management of FreePBX modules and SIP phone integration to a level never before available with any other Asterisk distribution. And now you can configure and reconfigure your new Incredible PBX phones from the convenience of the Incredible PBX GUI.

VitalPBX is perhaps the fastest-growing PBX offering based upon Asterisk with an installed presence in more than 100 countries worldwide. VitalPBX has generously provided a customized White Label version of Incredible PBX tailored for use with all Incredible PBX and VitalPBX custom applications. Follow this link for a free test drive!
 

Special Thanks to Vitelity. Vitelity is now Voyant Communications and has halted new registrations for the time being. Our special thanks to Vitelity for their unwavering financial support over many years and to the many Nerd Vittles readers who continue to enjoy the benefits of their service offerings. We will keep everyone posted on further developments.
 



Some Recent Nerd Vittles Articles of Interest…

  1. DISCLOSURE: Most Amazon referral links include a Nerd Vittles referral code so that Amazon can send us a boatload of money each month. It costs you nothing while keeping the Nerd Vittles lights burning brightly. We never recommend Amazon unless their prices or products are the best we could find at the time of publication. []
  2. The TP-Link adapter is no longer recommended due to it substantial USB power requirements. We recommend the AirLink 101 which can coexist with a 5V, 1A power supply. You must use Incredible Pi 1.3 or later. []

It’s TeleYapper 5.0: The Ultimate RoboDialer for Asterisk

We don't normally take a month off at Nerd Vittles which should tell you something about today's 10/10/10 column. We're pleased to introduce TeleYapper 5.0, a completely rewritten, Asterisk® 1.4 and 1.6.2-compatible version of our telephone broadcasting service.1 Using Cepstral text-to-speech, TeleYapper 5.0 brings individualized, text-based messaging and customized reminders coupled with the ability to capture recorded responses from every call.

WARNING: Because of changes in Cepstral, this application now requires an additional $200 license from Cepstral. We no longer recommend Cepstral for obvious reasons and will have a comparable system using Google's new Speech-to-Text application soon. Our apologies.

As part of the message delivery process, you now can customize and capture any one of four different responses from those that are called. And TeleYapper 5.0 will email you a CSV and/or XML file with the RoboResponse™ results when the calling process is completed including a list of failed calls and calls that were answered by an answering machine. In addition, you can have TeleYapper email certain call results to various individuals as the calls are processed if your requirements demand it.

For those with multiple outbound trunks, TeleYapper 5.0 supports simultaneous calls using multiple trunks. And now there are significant enhancements that detect answering machines and real people. This lets you deliver customized messages depending upon whether an actual human answers the phone.

Version 5 has been tested extensively with the Gold, Silver, and Bronze editions of PBX in a Flash 1.7.5.5, which provides support for the latest and greatest versions of Asterisk 1.4 and 1.6.2. And it should work well with other Asterisk aggregations with MySQL, Cepstral TTS support, and FreePBX 2.5 or later.

Overview. For those that have never used TeleYapper, here's a quick summary of how the new version works. 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 legitimate purposes as well. TeleYapper is licensed in several different ways for the following purposes: prerecorded phone messages for neighborhood association announcements, medical appointment reminders, school closings, tornado alerts, little league practices, municipal government reminders. It's free to use for non-profit, civic, and non-political purposes provided you don't solicit money or seek to sway someone's opinion or encourage a particular vote on an issue or candidate. All other uses require a commercial license. For commercial, political, and medical applications, please review our licensing terms below.

How it Works. Step #1 is to create a CSV or XML export from your favorite database application with the information that will be used to send the messages or reminders. This could be as simple as a list of phone numbers or as complex as a listing of doctors and patients with the dates, times, and places of their next medical appointments together with special patient instructions for activity preceding their visit, e.g. "Please remember to start flossing a month before your next dental appointment."

Step #2 is to create a config file with the robodial settings as well as the text which will actually be spoken during each customized call. If you remember form letters from your word processing days, TeleYapper's config file offers the same flexibility. A message can be as simple as "Take cover immediately. A tornado has been spotted at the end of your street." Or it could be a medical appointment reminder such as the following:

Hi. This is Allison from Charleston Family Clinic calling to confirm Jan's appointment with Doctor Quack on Tuesday, October 5th, 2010, at 10:30 a.m. in our Charleston office. Please remember not to eat or drink anything after midnight on the night before your scheduled appointment.

To confirm your appointment, press 1. To reschedule your appointment, press 2. To cancel your appointment, press 3. If we have reached you in error or if you do not wish to receive further automated medical appointment reminders, press 4. To hear this message again, please press 5 now.

And you can create a separate message which would be delivered in the event an answering machine takes the call:

Hi. This is Allison from Charleston Family Clinic calling to confirm Jan's appointment with Doctor Quack on Tuesday, October 5th, 2010, at 10:30 a.m. in our Charleston office. Please remember not to eat or drink anything after midnight on the night before your scheduled appointment.

If you need to change or cancel your appointment or if we have reached you in error, please call our office at your earliest convenience. The number is 800-123-4567. Goodbye.

Step #3 is to use your web browser to access a password-protected web page that will let you upload your CSV or XML data and your config file to kick off the dialing spree. Once the files have been uploaded, everything else is automatic.

Step #4 is to sit back and relax while TeleYapper executes your instructions and calling list. When the calling has been completed, the email address in your config file will be sent both CSV and XML reports of the results of all the calls. Either of these reports is suitable for import and manipulation using most spreadsheet applications.

Status Codes. Every call that is processed gets a status code entry whether the call is successful or fails. A status code of 0 means a call failed to both phone numbers provided for a particular callee. The second phone number is entirely optional. A status code of 5 means the call was answered but no response was provided by the called party. This typically would mean the call was picked up by an answering machine although it could mean Granny answered the call using a rotary dial phone. 🙄 Status codes of 1 through 4 have whatever meaning you choose to assign to each option when setting up a configuration for a particular calling campaign.

Legalese. TeleYapper 5.0 is free for use by non-profit, civic, and non-political organizations provided you absolve us from all financial and other responsibility in conjunction with your use of the software. Non-profit use further requires that no financial benefit be derived from the substance of the calls. Simply stated, your Little League team can use the software at no cost to remind kids to attend practice, but it cannot be used to solicit charitable contributions or to sell doughnuts without obtaining a commercial license.

By using this software, you also agree to strictly comply with federal and state regulations including 16 C.F.R. Part 310. In addition, you agree 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.

WARNING: With certain limited exceptions, most robocalling now requires prior written approval from those being called. See this link for a summary of the federal requirements. Be advised that improper use of this software may subject the user to penalties of up to $16,000 per call plus monetary damages to injured consumers.

Creative Commons LicenseLicensing. You are licensed to use this software under certain conditions. You do not own it. We do, and we also own 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 for commercial or political purposes must first request and then purchase a commercial license after outlining your proposed terms of use. Telemarketers need not apply! For doctors, lawyers, and others falling outside the scope of our free license who wish to obtain a commercial use license, please contact us for pricing and details. Be sure to summarize your intended use in your request together with a sufficient factual summary to demonstrate that your use is in compliance with 16 C.F.R. Part 310. Please also indicate whether you will require assistance with installation and setup.

Prerequisites. As mentioned, you'll need a Linux-based Asterisk aggregation such as PBX in a Flash to use TeleYapper 5.0. This means you need a system with Asterisk 1.4 or 1.6 as well as FreePBX 2.5 or higher. For quality reasons, we strongly recommend you purchase a commercial Cepstral text-to-speech license for your server. While Flite would technically work, most folks don't respond well to calls from Egor so we have customized the code for use solely with Cepstral. You'll find Cepstral installation instructions in this Nerd Vittles article. The TeleYapper 5.0 code also relies heavily on Apache and PHP, both of which are included in every PBX in a Flash system.

Installing Cepstral. Cepstral installation is not the simplest application to get working with Asterisk so here are the commands for those running 32-bit systems with Asterisk 1.4 or 1.6.2. For details on purchasing and registering Cepstral (and a discount) and for 64-bit installs, read our previous article including the comments.

For Asterisk 1.4 systems running under 32-bit CentOS, log into your server as root and issue the following commands accepting the Cepstral defaults. Be sure to create the Cepstral directory when prompted!

cd /root
wget http://nerd.bz/bnTVjX
tar -zxvf Cepstral*
cd Cepstral_Allison-8kHz_i386-linux_5.1.0
./install.sh
echo /opt/swift/lib > /etc/ld.so.conf.d/cepstral.conf
ldconfig
cd /usr/src
wget http://pbxinaflash.net/source/app_swift/app_swift-1.4.2.tar.gz
tar -zxvf app_swift*
cd app_swift-1.4.2
make
make install
ln -s /opt/swift/bin/swift /usr/bin/swift
sed -i 's|David-8kHz|Allison-8kHz|' /etc/asterisk/swift.conf
amportal restart
asterisk -rx "core show application swift"
ls /opt/swift/voices
swift --reg-voice

For Asterisk 1.6.2 systems running under 32-bit CentOS, log into your server as root and issue the following commands accepting the Cepstral defaults. Be sure to create the Cepstral directory when prompted!

cd /root
wget http://nerd.bz/bnTVjX
tar -zxvf Cepstral*
cd Cepstral_Allison-8kHz_i386-linux_5.1.0
./install.sh
echo /opt/swift/lib > /etc/ld.so.conf.d/cepstral.conf
ldconfig
cd /usr/src
wget http://pbxinaflash.net/source/app_swift/app_swift-1.6.2.tar.gz
tar -zxvf app_swift*
cd app_swift-1.6.2
make
make install
ln -s /opt/swift/bin/swift /usr/bin/swift
sed -i 's|David-8kHz|Allison-8kHz|' /etc/asterisk/swift.conf
amportal restart
asterisk -rx "core show application swift"
ls /opt/swift/voices
swift --reg-voice

Installing TeleYapper 5.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. Here are the commands to execute to install TeleYapper 5.0 after logging into your PBX in a Flash system as root. On other systems, you are well advised to carefully review the install script and tailor it to meet the individual requirements of the platform on which you are installing it.

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

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. For most users, you never should need to access the MySQL database directly. TeleYapper 5.0 handles the importing of CSV or XML files for processing, manages the call queue, and processes and emails CSV and/or XML-formatted reports to you when the calls are completed.

The install script creates the MySQL database to support TeleYapper 5.0. Should you need or want to manage the database directly, the easiest tool to use is 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 reminders database in the left column. Then click the reminders table entry in the left column to open the file. Unless you really, really know what you are doing and appreciate how much coding will be required to support new or different fields in the reminders file, don't improve it.

Here's the layout of the MySQL database table for TeleYapper 5.0:

  • id - System generated record ID
  • acctno - Account Number (12 alphanumeric characters)
  • provider - Provider Name (30 alphanumeric characters)
  • recipient - Recipient Name (30 alphanumeric characters)
  • apptdt - Appointment Date (MM/DD/YY format)
  • appttime - Appointment Time (HHMM format using 24-hr clock)
  • apptplace - Appointment Location (30 alphanumeric characters)
  • instructions - Free-form text (65535 alphanumeric characters)
  • phone1 - Primary Phone (NNN-NNN-NNNN or NNNNNNNNNN)
  • phone2 - Alternate Phone (NNN-NNN-NNNN or NNNNNNNNNN)
  • status - Status: 0=failedcall 5=ansmachine 1,2,3,4=user-defined
  • failedcalls - System Generated Number of Failed Calls

Tweaking PHP for TeleYapper. Depending upon your PHP setup and the number of calls you plan to process, you may need to adjust the default PHP resource settings on your server. The main reason is because TeleYapper generates a custom sound file for every call to be processed before the calling ever starts. If you plan to make thousands of calls, this can take some time. The PHP settings are stored in /etc/php.ini. You must log in as root and restart Apache after making changes to these settings: service httpd restart. The settings that matter are the following:

max_execution_time = 30 (we recommend 900 which is 15 minutes to process)
max_input_time = 60 (we recommend 300 which is 5 minutes to upload a file)
memory_limit = 100M (OK as is)

post_max_size = 8M (we recommend 100 megabytes which should be ample)

file_uploads = On (OK as is on most systems)
upload_max_filesize = 100M (we recommend 100 megabytes which should be ample)

Tweaking Crontab. TeleYapper relies upon a cron job to kick off its calling sprees so you'll need the following entry in your /etc/crontab file unless you used the install script which inserts it automatically:

* * * * * root /var/www/html/appt-reminders/gen-reminders.php > /dev/null 2>&1

Formatting CSV Data For Import. You don't necessarily need an external database in order to use TeleYapper 5.0 although it is designed to support almost any database or spreadsheet application in the marketplace so long as it can export data in CSV or XML format. A CSV (comma-separated values) or XML file is the middleware that makes everything work. Each line in a CSV file represents an entry to be processed by TeleYapper 5.0 when the CSV file is uploaded. Each item in a line is called a field. Every field begins and ends with double-quotes, and fields are separated from each other with commas. Do NOT include any quotation marks in your actual text, or you'll get a disaster. All fields are required, by the way, but only the Phone1 field must have an actual entry. The remaining fields may each consist of nothing more than a pair of double-quotes. Note also that the id, status, and failedcalls fields (shown in red below) must consist of a pair of double-quotes and nothing more. Here's the actual CSV format which must be used, and all of the data must appear on the same line so disregard the WordPress formatting below:

"id","acctno","provider","recipient","apptdt","appttime","apptplace","instructions","phone1","phone2",
"
status","failedcalls"

Here's what the CSV entry used for our sample medical reminder shown near the top of this article would look like. We've excluded the special instructions and Phone2 entries below only to simplify the display because of constraints inherent in our blog formatting:

"","12345","Quack","Jan","10/05/10","1030","Charleston","","4049876543","","",""

The XML Alternative. If you'd prefer to upload XML file templates for your calls instead of CSV data, a sample XML file is included in the distribution to show you the proper formatting. Here's a sample entry that matches the CSV data above:

<!-- Database: reminders -->
<reminders>
   <!-- Table: reminders -->
    <reminders>
       <id></id>
       <acctno>12345</acctno>
       <provider>Quack</provider>
       <recipient>Jan</recipient>
       <apptdt>10/05/10</apptdt>
       <appttime>1030</appttime>
       <apptplace>Charleston</apptplace>
       <instructions></instructions>
       <phone1>4049876543</phone1>
       <phone2></phone2>
       <status></status>
       <failedcalls></failedcalls>
    </reminders>
</reminders>

Direct Uploading with SAMBA. If you've activated SAMBA on your Asterisk server, you can upload TeleYapper files for processing directly. Be sure to name your CSV or XML file as reminders.csv or reminders.xml. And name your config file: config.php. Copy the files to the /var/www/html/appt-reminders/upload directory on your Asterisk server. That's all there is to it. If you need hints on SAMBA installation, see our Best of Nerd Vittles tutorial. Pay particular attention to the sections on Security Considerations and Firewall Settings. Before using the SAMBA, be sure to upload some test CSV/XML files using the web interface. There is no error checking when you use the SAMBA option!

Configuring TeleYapper 5.0 Calling Scripts. Now let's address how we transform a CSV or XML entry such as the ones shown above into a personalized phone call to Jan, the actual patient in our example. Every TeleYapper session can have an individual configuration file associated with it. If none is specified, then a default configuration is used. In this way, you can customize call procedures and calling scripts for different tasks. The easiest approach is to always upload a config file with your CSV or XML data file. Then you won't get unexpected results when the calling begins.

HINT: It's a very good idea to create a sample upload with your own phone number and some sample configuration data to test things out before you start calling thousands of clients.

A default configuration file (config.default.php) as well as sample CSV and XML templates (reminders.csv and reminders.xml) come with TeleYapper 5.0 and can be found on your Asterisk server in the /var/www/html/appt-reminders directory. Make a copy of them, and move the copies to your Mac or PC. Then, using TextEdit or Notepad, open the files and have a look. Before addressing other configuration options in config.php, let's tackle the setup procedure for calling scripts.

The actual boilerplate message to be delivered to the called party is stored in $msg. Notice that you can substitute data out of your database in the boilerplate template by enclosing any desired fields in braces. Just make sure the fieldname exactly matches one of the fields in the reminders database. So our entry for the sample call above would look like this:

$msg="Hi: This is Allison from Charleston Family Clinic calling to confirm an appointment for {recipient}, with Doctor {provider}, on {apptdt}, at {appttime}, in our {apptplace} office. {instructions}";

Just a comment that, for those with large data processing systems, you may find it more convenient to generate the actual text for each reminder on your mega-machine. In this case, all of the data (up to 65,535 characters) could be loaded into the instructions field for each callee. So each upload record might consist of nothing more than phone numbers and instructions. In this scenario, the $msg entry in config.php would look like this: $msg="{instructions}";

The key press choices that are provided to the called party are configured using the $options field which would look like this for our example:

$options = "To confirm your appointment, please press 1. To reschedule your appointment, press 2. To cancel your appointment, press 3. If we have reached you in error or if you do not wish to receive appointment reminders, press 4. To hear this message again, please press 5 now.";

Don't confuse the 5 option which is automatically included in the TeleYapper dialplan code with status code 5 which means an answering machine picked up a call. Status code 5 is system-generated and is not stored based upon a callee choosing to listen to a recorded message more than once. The two 5's are not the same even though options 1-4 are actually used to define what the first four status codes mean on your system.

As we mentioned, the system has the smarts to usually figure out if an answering machine took the call. When it detects this, the $ansmach message is played instead of $options. A sample entry might look like this:

$ansmach = "If you need to cancel or reschedule this appointment, if we reached you in error, or if you do not wish to receive appointment reminders in the future, please call 777-123-4567 at your earliest convenience. Thank you for your assistance. Goodbye.";

Finally, for each of the four choices (1 through 4), there is a response message which is played if the callee chooses that option. Here's a sample template to get you started:

$chose1 = "Thank you for making Charleston Family Clinic your medical home. Your appointment has been confirmed. Goodbye.";
$chose2 = "Thank you. A representative will be calling you to reschedule your appointment. Goodbye.";
$chose3 = "Thank you for making Charleston Family Clinic your medical home. Your appointment has been cancelled. Goodbye.";
$chose4 = "Thank you. We will update our systems and apologize for the call. Goodbye.";

Thus, when a callee responds to the boilerplate call by pressing 1, $chose1 is played in response. If an email address has been entered for $chose1email, then a copy of the log entry for that call is sent to the specified email address using the customized email subjects (shown below) in addition to being placed in the master call log. The same process occurs when the other options are chosen. Particularly with medical appointment cancellations, it may be important to receive immediate notification when an appointment is canceled or a patient requests a change in scheduling. So the software includes the flexibility to generate instant emails to various email addresses depending upon which option is pressed. As noted, the optional instant emails will be generated using the email subjects entered for the following fields in your customized configuration file:

$chose1subj = "APPOINTMENT NOTIFICATION CONFIRMED BY PHONE";
$chose2subj = "APPOINTMENT RESCHEDULING REQUEST BY PHONE";
$chose3subj = "APPOINTMENT CANCELLATION REQUEST BY PHONE";
$chose4subj = "APPOINTMENT SCHEDULING ERROR REPORTED BY PHONE";
$chose5subj = "APPOINTMENT NOTIFICATION LEFT ON ANSWERING MACHINE";

Uploading Data & Config Files to TeleYapper. Simple web pages are used to upload CSV and XML data with config files to TeleYapper 5.0. WARNING: These web pages have NOT been sanitized for use on the Internet. They are designed for use on your local area network behind a secure firewall. On PBX in a Flash systems, the web pages are password-protected and require a valid user account login for access. This will NOT be the case on other Asterisk aggregations without tweaking your Apache configuration. Sample entries can be found in teleyapper.conf in the /var/www/html/appt-reminders directory. On PBX in a Flash systems, you can log in using maint, wwwadmin, or meetme accounts. Or you can create an additional account to use with TeleYapper 5.0:

htpasswd /usr/local/apache/passwd/wwwpasswd teleyapper

There are separate web pages depending upon whether you wish to upload CSV or XML data. For CSV data, the web address is http://ipaddress/appt-reminders/uploadcsv/. For XML data, the web address is http://ipaddress/appt-reminders/uploadxml/. Substitute the private IP address of your Asterisk server for ipaddress. Here's a sample of the CSV web form. You can, of course, substitute your own logo on the right if desired.

CSV Web Form

Other TeleYapper 5.0 Config Options. In addition to the boilerplate text for TeleYapper calls, there are a number of other settings which can be adjusted to meet your individual requirements.

The database settings should never need adjusting so just leave them alone. They look like this:

$db="reminders";
$fi="reminders";
$dbuser="root";
$dbpass="passw0rd";

You can manually set a starting and ending time to begin and end the calling sequence for a particular upload. Never set these in the default configuration! Only set them in a config file to be uploaded. If the entries are blank, calls will commence shortly after the upload completes and will end when all of the entries have been processed. Note that there is no current flexibility to schedule individual calls based upon the time of the appointment. This typically would be handled by selecting particular records for processing in your primary database. For example, for medical appointments, you would select records in which an appointment is scheduled for tomorrow and then upload the list to TeleYapper which would place the calls today. We probably will expand this functionality down the road, but it's not there yet. So it's up to you to upload call lists which basically are ripe for calling now.

If you wish to use the $startcalls and $endcalls features in your custom config files, the syntax should look like this: YYYYMMDD,HHMM where YYYY is a 4-digit year, MM is a 2-digit month, DD is a 2-digit day of the month, HH is the 2-digit hour based upon a 24-hour clock (aka Military Time), and MM is the 2-digit minute. Note that calls will not end precisely at the $endcalls time. Any existing calls already in process will be completed including redials and calls to an alternate $phone2 number. This process can take up to 10 minutes to complete.

CAUTION: Be very careful using the $startcalls option! Nothing precludes your scheduling a thousand reminder calls to kick off at 0200 which is 2 a.m. Not really a good thing if job security matters to you.

To restart the calling process on the following day, log into your server as root and switch to the /var/www/html/appt-reminders directory. Then edit config.php and adjust the $startcalls and $endcalls for the remaining calls. Then run: ./gen-calls.php. Any existing database entry with a status=0 will be called when the calling process resumes. You can monitor the calling process by running: ./showcalls.sh. Press Ctrl-C to terminate the call display. It usually takes a minute or two for the first call to be placed.

$callerid is used to set the CallerID of outbound calls if your telephony provider supports it.

$trunk is used to set the outbound dialing trunk for calls. The default works for most purposes.

$channel is used to set the outbound dialing channel for calls. The default works for most purposes.

$maxcalls and $spacing are used to set the number of simultaneous calls and spacing between calls respectively. Be very careful with these settings. You must have sufficient outbound trunks to handle the number of simultaneous calls you schedule with $maxcalls, or you will get circuit busy conditions which are recorded as calls to busy numbers. Keep in mind that TeleYapper tries every call twice with 2 minutes of separation. So, if you only have two outbound trunks, don't set $maxcalls above 1, or you will get trunk busy conditions whenever original calls to an individual fail, i.e. line busy or no answer situations. In addition, remember that TeleYapper 5.0 supports a second phone number for each called party. These are triggered whenever the original two calls to the primary number fail and must also be considered in setting $maxcalls properly. If your logs show a disproportionate number of failed calls (status=0), this may be a tell-tale sign of trunk busy conditions.

$waittime is the number of seconds a call to any given number will ring. 45 seconds is about 7 rings.

$email is the email address that will be used to send the logs at the completion of the calling process. $chose1email through $chose5email are the optional email addresses if you want instantaneous feedback on certain types of status results. This means you get an immediate email if a certain call results in a certain status code. Leave the ones blank for $status conditions on which you want no immediate feedback and simply wait for the logs to arrive.

$csvreport and $xmlreport are used to set which type of completion report you wish to receive. If you want both of them, set them both to 1. Otherwise, set the one you don't want to 0.

The Old Fashioned Way. For those of you that preferred the older method of entering data directly into MySQL, you still can use phpMyAdmin or some other front-end tool to enter the data directly into the reminders.reminders table. Just leave the id field blank since it automatically gets generated by MySQL. And either leave the status and failedcalls fields blank or set them to 0. They also are system-generated. Once you have your data in place, log into your server as root, and...

cd /var/www/html/appt-reminders
Configure config.php for your calling campaign
Run ./gen-mysql.php to kick off TeleYapper 5.0

In Closing... Finally, let us issue our usual tinkerer's warning. Don't delete anything from the /var/www/html/appt-reminders directory tree. Just because you don't know its function doesn't mean it doesn't have one. Aside from that, the documentation above should get you started today. Be advised that TeleYapper 5.0 still is a work in progress. So check back every week or so for new comments on this article to see what's been changed, added, or fixed since you originally downloaded the application. Enjoy!



Need help with Asterisk? Visit the PBX in a Flash Forum.
Or Try the New, Free PBX in a Flash Conference Bridge.


whos.amung.us If you're wondering what your fellow man is reading on Nerd Vittles these days, wonder no more. Visit our new whos.amung.us statistical web site and check out what's happening. It's a terrific resource both for us and for you.


 

Special Thanks to Our Generous Sponsors


FULL DISCLOSURE: ClearlyIP, Skyetel, Vitelity, DigitalOcean, Vultr, VoIP.ms, 3CX, Sangoma, TelecomsXchange and VitalPBX have provided financial support to Nerd Vittles and our open source projects through advertising, referral revenue, and/or merchandise. As an Amazon Associate and Best Buy Affiliate, we also earn from qualifying purchases. We’ve chosen these providers not the other way around. Our decisions are based upon their corporate reputation and the quality of their offerings and pricing. Our recommendations regarding technology are reached without regard to financial compensation except in situations in which comparable products at comparable pricing are available from multiple sources. In this limited case, we support our sponsors because our sponsors support us.

BOGO Bonaza: Enjoy state-of-the-art VoIP service with a $10 credit and half-price SIP service on up to $500 of Skyetel trunking with free number porting when you fund your Skyetel account. No limits on number of simultaneous calls. Quadruple data center redundancy. $25 monthly minimum spend required. Tutorial and sign up details are here.

The lynchpin of Incredible PBX 2020 and beyond is ClearlyIP components which bring management of FreePBX modules and SIP phone integration to a level never before available with any other Asterisk distribution. And now you can configure and reconfigure your new Incredible PBX phones from the convenience of the Incredible PBX GUI.

VitalPBX is perhaps the fastest-growing PBX offering based upon Asterisk with an installed presence in more than 100 countries worldwide. VitalPBX has generously provided a customized White Label version of Incredible PBX tailored for use with all Incredible PBX and VitalPBX custom applications. Follow this link for a free test drive!
 

Special Thanks to Vitelity. Vitelity is now Voyant Communications and has halted new registrations for the time being. Our special thanks to Vitelity for their unwavering financial support over many years and to the many Nerd Vittles readers who continue to enjoy the benefits of their service offerings. We will keep everyone posted on further developments.
 


Some Recent Nerd Vittles Articles of Interest...

  1. Special thanks to my dear wife, Mary, who did much of the system design work for this project, and to Community Health Centers of Florida for underwriting some of the design and development costs. []

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