Triple Treat: Some Asterisk Utilities to Brighten Your Summer

If you live and breathe Asterisk® but don’t visit the PIAF Forum regularly, you’re missing one of the best VoIP resources on the Internet. To get everyone in the Independence Day mood, we thought we’d share a few of the new goodies that have appeared on the PIAF Forum since The Great Crash of 2013. Although each of these utilities was designed to support PBX in a Flash™ and Incredible PBX™ systems, with a little tweaking, they’ll work equally well on other CentOS 6-based Asterisk servers of any flavor so long as the base version of Asterisk is at least 1.8. They also run just fine with Incredible PBX for the Raspberry Pi.

Import Google Contacts into Asterisk Phonebook. For everyone still using Gmail after the NSA disclosures, this app is for you. Now you can share your Google Contacts with Asterisk as well as the NSA. The beauty of this utility is that it also makes your Google Contacts available as a CallerID Name lookup source for CallerID Superfecta. So all of those cellphone numbers in your contacts will now display real CallerID names when those folks call you. Our special tip of the hat to John Babb for producing the original script and to @raphou for finding it and sharing it with the PIAF community.

Before you can import your Google Contacts into the Asterisk Phonebook, you first need to install Google’s gdata Python client. Just log into your server as root using an SSH client and issue the following commands:

cd /root
mkdir Google
cd Google
wget https://gdata-python-client.googlecode.com/files/gdata-2.0.18.tar.gz
tar zxvf gdata*
cd gdata*
chmod +x setup.py
./setup.py install
wget http://pbxinaflash.com/googlecontacts.py
nano -w googlecontacts.py

Once the editor opens, you need make a couple changes in googlecontacts.py. NOTE: We’ve adjusted the original code for use in the United States. If you’re living elsewhere, then grab the original code on the PIAF Forum.

The code you downloaded looks like this (plus some required indentation):
#!/usr/bin/python
# googlecontacts.py v0.1
# By: John Baab
# Email: rhpot1991@ubuntu.com
# Purpose: syncs contacts from google to asterisk server
# Requirements: python, gdata python client, asterisk
#
# License:
#
# This Package is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public
# License as published by the Free Software Foundation; either
# version 3 of the License, or (at your option) any later version.
#
# This package is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this package; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# On Debian & Ubuntu systems, a complete copy of the GPL can be found under
# /usr/share/common-licenses/GPL-3, or (at your option) any later version

import atom,re,sys,os
import gdata.contacts
import gdata.contacts.service

def main():
# Change this if you aren't in the US. If you have more than one country code in your contacts,
# then use an empty string and make sure that each number has a country code.
country_code = ""

gd_client = gdata.contacts.service.ContactsService()
gd_client.email = "yourname@gmail.com"
gd_client.password = "your_password"
gd_client.source = 'gcontact2ast'
gd_client.ProgrammaticLogin()
query = gdata.contacts.service.ContactsQuery()
query.max_results = 1000
feed = gd_client.GetContactsFeed(query.ToUri())

# delete all of our contacts before we refetch them, this will allow deletions
os.system("asterisk -rx \'database deltree cidname\'")

# for each phone number in the contacts
for i, entry in enumerate(feed.entry):
for phone in entry.phone_number:
# Strip out any non numeric characters
phone.text = re.sub('\D', '', phone.text)

# Remove leading digit if it exists, we will add this again later for all numbers
# Only if a country code is defined.
if country_code != "":
phone.text = re.sub('^\+?%s' % country_code, '', phone.text)

# Insert the number into the cidname database, reinsert the country code if defined.
os.system("asterisk -rx \'database put cidname %s%s \"%s\"\'" % (country_code,phone.text,entry.title.text))

if __name__ == "__main__":
main()

Before you save the script, you’ll need to make a few adjustments. First, insert your actual Gmail account name and password in lines 37 and 38. If you’re using 2-step authentication with your Google account, remember to generate and use an application-specific password. Your regular password won’t work! Second, if your Google Contacts include more than 1,000 phone entries, adjust the default setting on line 42. Now save the script: Ctrl-X, Y, then Enter. Then make the script executable: chmod +x googlecontacts.py.

Now you’re ready to import your Google Contacts. Just issue the following command: ./googlecontacts.py

You can check whether the import was successful by displaying a list of all the new entries in your Asterisk Phonebook. Here’s the command:

asterisk -rx "database show cidname"

Want to import entries from more than one Google account? It’s easy. Just make a duplicate of the script and repeat the setup process above with your new credentials. You’ll also need to comment out line 46 in the second script so that your previous import doesn’t get wiped out of the Asterisk Phonebook when you run the second script. Just make a mental note to run the scripts in the proper order whenever you wish to update your Asterisk Phonebook.

UPDATES: There’s now an Asterisk Phonebook app for Yealink T46G Color SIP phones. Once installed, you can look up and call numbers in your Asterisk Phonebook by pressing a button on your phone. Read all about it and download the app from the PIAF Forum.

For those using Google to host your own domain, there’s now a patch to let you import your Google Contacts into the Asterisk Phonebook as well. See this post on the PIAF Forum for the procedure.

If you’d like to keep your Asterisk Phonebook sync’d with your Google Contacts, then run the script every night by inserting the following line in /etc/crontab:

9 0 * * * root /root/Google/gdata-2.0.18/googlecontacts.py >/dev/null 2>&1

Now that you have your contacts imported, we need to adjust CallerID Superfecta so that incoming calls are scanned for a phone number match using the Asterisk Phonebook. Using a web browser, open FreePBX® and choose the CallerID Superfecta application. Modify CallerID Superfecta Lookup Sources in FreePBX to include Asterisk Phonebook. Make certain the Asterisk Phonebook entry appears near the top of the list so that it gets examined before any external lookup sources. This speeds up incoming call connections considerably.


Email Daily Call Log to Yourself. Many have requested a simple way to have a snapshot of your incoming daily calls emailed to the Asterisk administrator each day. Special thanks to @Boolah for the code. Using any PIAF system, simply create a file in /root called cdrlog.sh that looks like this:

#!/bin/bash
mysql -u root -ppassw0rd asteriskcdrdb -e 'SELECT calldate, clid FROM cdr WHERE DATE(calldate) = SUBDATE(CURDATE(), 1) AND did <> ""'

For Incredible PBX for the Raspberry Pi, the script should look like this:

#!/bin/bash
mysql -u root -praspberry asteriskcdrdb -e 'SELECT calldate, clid FROM cdr WHERE DATE(calldate) = SUBDATE(CURDATE(), 1) AND did <> ""'

Make the script executable: chmod +x /root/cdrlog.sh

Then run the script: /root/cdrlog.sh

If you’d like the listing of the previous day’s calls emailed to you each day, then add the following entry to /etc/crontab after inserting your actual email address:

8 0 * * * root /root/cdrlog.sh | mail -s "Daily Call Log" yourname@gmail.com >/dev/null 2>&1


Trunk Failure Email Alerts. One of the most frequently requested scripts on the PIAF Forum has been a utility which would alert you when one of your Asterisk trunks has failed. So here you go. This script monitors SIP, IAX2, and Google Voice trunks and sends you an email whenever one or more of the trunks fails. Just download the script, insert your email address at the top of the script, and add an entry to /etc/crontab to check the trunks as often as desired. The default setting is every 5 minutes.

cd /root
wget http://pbxinaflash.com/trunkcheck.tar.gz
tar zxvf trunkcheck.tar.gz
nano -w trunkcheck.sh
echo "5 * * * * root /root/trunkcheck.sh > /dev/null 2>&1" >> /etc/crontab


MP3 Playback of Voicemails with Optional Transcription. And we have a bonus application for you as well. By default, Asterisk voicemails that are delivered to your email address won’t play back on many computers and smartphones. This script fixes that while also providing the option to transcribe the first 15 seconds of the message into text. We’ve only tested this with PIAF-Green with Asterisk 11, but it also should work just fine with Incredible PBX 11 for the Raspberry Pi. To install it, log into your server as root and issue the following commands. If you want to activate the transcription feature, edit the downloaded script and change transcribe=0 to transcribe=1.

cd /root
wget http://pbxinaflash.com/installmp3stt.sh
chmod +x installmp3stt.sh
./installmp3stt.sh

Once you have run the installation script, you’ll need to make a couple of adjustments in the FreePBX GUI. Log into FreePBX 2.11 and choose Settings, Voicemail Admin, Settings and make the following changes:

format: wav|wav49
mailcmd: /usr/sbin/sendmailmp3

Now leave yourself a voicemail message after making certain that you’ve entered an email delivery address for the extension. Enjoy and Happy Fourth!


Deals of the Week. There are a couple of amazing deals still on the street, but you’d better hurry. First, for new customers, Sangoma is offering a board of your choice from a very impressive list at 75% off. For details, see this thread on the PIAF Forum. Second, a new company called Copy.com is offering 20GB of free cloud storage with no restrictions on file size uploads (which are all too common with other free offers). Copy.com has free sync apps for Windows, Macs, and Linux systems. To take advantage of the offer, just click on our referral link here. We get 5GB of extra storage, too, which will help avoid another PIAF Forum disaster.

Originally published: Wednesday, June 26, 2013




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


 

Don’t miss the first-ever FreePBX World on August 27-28 at the Mandalay Bay in Las Vegas. For complete details, see this post on the FreePBX blog.


 

We are pleased to once again be able to offer Nerd Vittles’ readers a 20% discount on registration to attend this year’s 10th Anniversary AstriCon in Atlanta. And, if you hurry, you also can take advantage of the early bird registration discount. Here’s the Nerd Vittles Discount Code: AC13NERD.


 
New Vitelity Special. Vitelity has generously offered a new discount for PBX in a Flash users. You now can get an almost half-price DID from our special Vitelity sign-up link. If you’re seeking the best flexibility in choosing an area code and phone number plus the lowest entry level pricing plus high quality calls, then Vitelity is the hands-down winner. Vitelity provides Tier A DID inbound service in over 3,000 rate centers throughout the US and Canada. And, when you use our special link to sign up, the Nerd Vittles and PBX in a Flash projects get a few shekels down the road while you get an incredible signup deal as well. The going rate for Vitelity’s DID service is $7.95 a month which includes up to 4,000 incoming minutes on two simultaneous channels with terminations priced at 1.45¢ per minute. Not any more! For PBX in a Flash users, here’s a deal you can’t (and shouldn’t) refuse! Sign up now, and you can purchase a Tier A DID with unlimited incoming calls for just $3.99 a month. To check availability of local numbers and tiers of service from Vitelity, click here. Do not use this link to order your DIDs, or you won’t get the special pricing! Vitelity’s rate is just 1.44¢ per minute for outbound calls in the U.S. There is a $35 prepay when you sign up. This covers future usage and any balance is fully refundable if you decide to discontinue service with Vitelity.
 


Some Recent Nerd Vittles Articles of Interest…

Be Sociable, Share!

6 Responses to “Triple Treat: Some Asterisk Utilities to Brighten Your Summer”

  1. Al says:

    How about suggestions on how to make this work with Sugar CRM?

  2. Ben Green says:

    Hi Ward,

    I tested the Wav–>MP3 and transcription script on PIAF Purple (1.8), and it worked fine. Is there anyway to increase transcription length to 30 seconds?

    Thanks for the goodies.
    B

    [WM: The 15-second limitation is imposed by Google unfortunately.]

  3. Bob Koure says:

    googlecontacts.py seems not to work with google apps mailboxes (login issues). I get a block of characters then “There was an error in your request.\nThat's all we know.’, ‘reason’: ‘Unauthorized’ ”
    The account is not two-factor, so it’s not that it needs an application specific password.
    Any ideas?

    BTW, I had been looking at this synchronization issue as well. Came up with a google script that exports all contacts with at least one phone number as a list in the body of an email and sends it wherever specified. Figured I’d create a malbox just for contacts, then pull it down via python’s imaplib.
    I took this approach to sidestep Google’s APIs, which have been something of a moving target.
    Anyway, you’re welcome to the script if you have a use for it; I was planning to post it on the PIAF forum when I’d completed the python/imap/db update code.

  4. Chris V says:

    Just a heads-up (and should go without saying…), but you need to make sure you have lame installed on your system for this to work. If you’re not running pbx-in-a-flash, you may need to manually install it with the following commands:

    wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-rel ease-0.5.2-2.el6.rf.x86_64.rpm

    rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

    yum install lame

    Hope this helps.

    [WM: Thanks. All current versions of PBX in a Flash and Incredible PBX include lame in the base installs.]

  5. Nerd Uno says:

    Just a heads up that the Google Contacts import can now be used with Google Apps mailboxes. See this post on the PIAF Forum for details.

  6. nelson says:

    very good tool, i have a problem in spanish we use a lot of caracteres like “áéíóúñÑ” that give me this error

    UnicodeEncodeError: ‘ascii’ codec can’t encode character u’\xf1′ in position 59: ordinal not in range(128)

    As i’m not an pyton programer, an you help me with this..

    Thank you

    Nhu

Leave a Reply

Ringbinder theme by Themocracy