Its official - Adhearsion & Voxeo

Media_httpjsgoeckefil_afilo
Adhearsion is effective in making telephony applications easy to develop. The next phase is to make deployment and scaling of these applications easy while increasing choice of development environments. The first step in accelerating this phase was announced today, Adhearsion and Voxeo Launch Voxeo Labs! It is time to take Adhearsion to the cloud. Some of you that have been following along closely, may already have noticed our involvement with Tropo.com. We worked closely with Voxeo at the inception of Tropo which was subsequently launched at eComm in March of 2009. The goal of Tropo.com is to bring a scalable telephony cloud infrastructure to the broadest group of developers by allowing development directly in dynamic languages. Languages included are: Javascript, Groovy, PHP, Python and Ruby. We will now be focused on bringing Tropo and Adhearsion together to offer the power of Adhearsion with the scale of Tropo, while extending capabilities in the other languages. Jay and I as founding members of Voxeo Labs is no accident. The DNA of Voxeo Labs is a commitment to open-source. Adhearsion will continue to evolve as an open-source framework with continued support for Asterisk along with Tropo and others. Our goal is to provide the widest possible set of deployment choices for the Adhearsion community, while eliminating friction for those who want effortless deployment and scaling. Stay tuned as we have lots of interesting announcements just around the corner. In the meantime, thanks to the entire Adhearsion community for the support that allowed us to pursue this next step.
Posted
 

Adhearsion (アドヒアジョン) & Tropo presentation at Ruby Kaigi - Tokyo 2009

I just gave my talk at Ruby Kaigi in Tokyo Japan. The event is well organized and attended. I suppose that is a bit easier since Tokyo is the home of Ruby, and filled with 13 million people. Here are the slides: [slideshare id=1732968&doc=rubykaigijuly2009-tokyojapanese-090716214905-phpapp02]
Posted
 

Behavior Driven Systems Monitoring for Telephony

Media_httpjsgoeckefil_sclwi
While attending Euruko several weeks ago, I had the opportunity to see @aslak_hellesoy present the Cucumber Behavior Driven Development (BDD) framework. BDD is a part of Agile software development focused on bringing the domain expert into the specification process through the use of natural language. This is done through the users and developers creating a story that is directly parsed by the code for tests. Aslak's presentation was well done, giving some compelling reasons to adhere to BDD principals, showing that using Cucumber made it a joy. Thing is, Cucumber is already a part of testing for  the Adhearsion framework and some specific projects we are working on. What was new to me, was a lightning talk given at the end of the day on Cucumber-Nagios.

Read the rest of this post »

Posted
 

Using C#/.Net to Invoke the Adhearsion API via REST

Recently an Adhearsion community member, David Lawal, built upon the PHP/REST example I posted back in February. David comes from a C#/.Net background and was beginning to learn Ruby in order to use Adhearsion. Then, in his own words:
"...I needed to leverage 'all the work' done in .Net...As I discovered, the marriage of .Net and Adhearsion was lovely, thanks to the RESTful RPC [API of Adhearsion]"
So David created an example and has graciously shared it with the rest of us. The example includes a component in Adhearsion that has this method extending the 'methods_for :rpc':

Read the rest of this post »

Posted
 

Mashing up Tripit with Adhearsion

Media_httpjsgoeckefil_aoubd
A friend of mine in Barcelona who travels frequently, and runs his own business, recently asked me if he could tie his Tripit location to his business phone routing. Even when he is traveling across the Atlantic, he must be able to provide telephone support to his clients but only based on a reasonable time in the timezone he is in. Of course you could setup routing rules in your phone system each time you move to a new timezone, but good luck remembering to do this. Tripit now makes a blog badge available that reports your current location based on city, state or country:
Media_httpjsgoeckefil_gookd
My Tripit Adhearsion Comonponent on Github allows you to mashup the details from your badge and use them in your dialplan. Now, you may add this component to your project and add something like this to your Adhearsion dialplan: [sourcecode='ruby'] adhearsion { user_time = tripit_user_time?('jdoe') if user_time ahn_log.tripit.debug user_time else ahn_log.tripit.debug 'Error' end } [/sourcecode] You may then use this information to decide whether to dial your mobile at your destination, or send it straight to voicemail. This is a great example of using Adhearsion to mashup data available on the web and use it to control your communications.
Posted
 

Adhearsion Website and Sandbox Migration Complete

Media_httpjsgoeckefil_ahqti
Over the last week we have been working to migrate various Adhearsion services to new homes. This could not have come a moment too soon, as during the migration one of the hard drives in our server in Texas gave up the ghost. Of course we used RAID, so we did not miss a beat, but clearly it was time to move along. To this end we have now migrated the Adhearsion website, wiki and API docs to Amazon EC2. Leveraging S3 and EBS we have a great solution that allows us to quickly fire up more servers if and when needed. The cloud is great. We have also moved the Sandbox to a new hosted server.
Media_httpwwwvoxeocom_kchhi
Our friends at Voxeo have provided a great server for us and are now sponsoring the Adhearsion Sandbox. It is great to have a visionary leader in the telephony cloud space involved with the Adhearsion community. I would like to take this opportunity to remind folks what the Adhearsion Sandbox provides. We have provided a hosted system that takes away the need to install your own Asterisk to get started developing Adhearsion applications. Simply install Adhearsion, sign-up for a Sandbox account and get started writing apps. Our goal is to lower all the barriers to make it easy for developers to realize the possibilities of voice in modern web development. Enjoy the new servers!
Posted
 

Click to Call on stage with Sinatra, Rack and Passenger

I have been preparing an Amazon Machine Image (AMI) with Adhearsion, Asterisk and all of the available components installed and pre-configur
Media_httpwwwmodrails_ebioq
ed to be made public soon. For the AMI I decided to get the Sinatra web app included with the Click To Call component up and running as a daemon. I used a combination of Rack and Passenger, since they make the process so easy and production ready. To this end I have updated the README and Click To Call component I covered in my previous blog post to include the how to and Rack configuration file required. To get this up and running do the following:
  • Install the Apache Webserver
  • sudo gem install rack
  • sudo gem install passenger (follow instructions here for compiling the Apache module)
Copy the files and directories in ~ahn-project/components/restful_clicktocall/web directory to the appropriate file system location for your Apache web server. Add these virtual host settings to your Apache configuration (ie - /etc/httpd/conf/httpd.conf): [sourcecode language='php'] ServerName ec2-174-129-89-20.compute-1.amazonaws.com DocumentRoot /var/www/restful_clicktocall_web/public [/sourcecode] Change line three to reflect your configuration. Restart your Apache web server and then connect to the site you configured. For more options I recommend referring to the Passenger documentation found here. Stay tuned for the upcoming Amazon Machine Image!
Posted
 

Skype Rates and Least Cost Routing

Now that Skype is coming to the enterprise with Skype for Asterisk and Skype for SIP, they will need to enhance the data available for their calling rates. Enabling Least Cost Routing (LCR) is a must for any VoIP provider to the enterprise. LCR allows a phone system to determine, on a call by call basis, which VoIP provider to use based on the best rates associated to the country code or prefix being dialed. As of now Skype publishes a web page of calling rates based on the country name and the per minute rate including or excluding the tax. A few additional items are needed to make this usable for LCR systems:
  • The associated country code for each country (ie - '34' for Spain, '1' for the US, etc)
  • More granular prefixes where calling rates may differ (ie - '346' for Spanish mobiles, '336' for Frech mobiles, '1212' for NYC, '1712' for Iowa, etc)
  • Billing intervals
  • A file download in CSV, or similar format, for import into LCR systems
Of course, in the meantime it is easy enough to scrape the website and convert the available data into a more appropriate format. Here is an example, in Ruby, of how this may be done in a trivial way: [sourcecode language='ruby'] require 'rubygems' require 'open-uri' require 'nokogiri' require 'json' skype_rates = Hash.new skype_url = 'http://www.skype.com/prices/callrates/#allRatesTab' skype_htmldoc = Nokogiri::Hpricot(open(skype_url).read) (skype_htmldoc/'table.listing//tr.r1').each do |country| country_name = country.at('td').inner_html skype_rates.merge!({ country_name => { 'amount' => country.at('span.amount').inner_html.split(' country.at('span.vat').inner_html.split('JSON output as follows: [sourcecode language='javascript'] { "Bolivia-La Paz": { "amount":0.122, "vat":0.14 }, "Sweden - Mobile": { "amount":0.292, "vat":0.336 }, "Hong Kong": { "amount":0.021, "vat":0.024 } } [/sourcecode] You may then perform a Regular Expression against another data source to derive the appropriate country codes/prefixes and store those in your LCR system. A good example of the additional detail needed is provided by Flowroute. I have on my list of actions to create an Adhearsion component to provide LCR capabilities for any Adhearsion application. The plan is to support a wide number of VoIP providers and other data inputs as a part of this plug-in. In the meantime, it will be interesting to see how Skype goes about publishing their rates with additional details and formats for download. UPDATE @JimCanuck points out it is not just about least cost, but also about quality of termination. Skype has some interesting approaches to call quality. More here.
Posted
 

VXML Style Voice Form for Adhearsion

The Adhearsion developer community continues to create new applications and components.
Media_httpjsgoeckefil_ggrvf
And even more importantly, sharing them. The latest component addition to the line-up is a VoiceXML style Voice Form plugin for Adhearsion, created by @adzap and posted to GitHub. You may new create your own compenent, include the Voice Form module and create extensive voice menus to your callers. Here is the classic Adhearison Simon example re-factored into a Voice Form: [sourcecode language='ruby'] class SimonGame include VoiceForm voice_form do setup do @number = '' end field(:attempt, :attempts => 1) do prompt :play => :current_number, :bargein => false, :timeout => 2 setup do @number here. Enjoy and many thanks to @adzap!
Posted
 

Adhearsion Developer Community Writing Apps for America

Media_httpjsgoeckefil_aihwg
@3lsilver (aka lewdsilver) has brought to my attention an application that he and a team built for the Apps for America contest. Apps for America is a contest sponsored by Sunlight Labs, where their moto is 'turning government data into usable information'. Sunlight Labs provides a set of APIs that exposes such information as census data, congressional data and much more. The APIs are intended to power mash-ups to drive government transparency and citizen participation. At least two of the applications submitted to the contest use the combination of Adhearsion and Asterisk. Speak for Change, submitted by @3lsilver and team, allows citizens to leave voicemails for their representatives by calling a toll-free number, then makes these messages public for all to listen to and comment on. The second application, Call Congress, provides a website with a click to call capability to find and then contact your Senators and Representatives. As I have said before, radical transparency is the way forward out of the current US predicament, not excessive regulation. This includes the government and financial markets. It is great to see open source telephony and Adhearsion playing their roles. These applications are great examples of open source making it possible to do things today that would have been prohibitively expensive and difficult before.
Posted