Archive for the ‘Multi-channel’ Category

Dial and SMS your APIs with Tropo

Thursday, December 22nd, 2011

The number of APIs available are increasing by the day and so is the popularity of Node.JS, the server-side event-driven javascript framework. This got me thinking… How cool would it be to be able to call or sms an API with your phone using Node.JS?

This is a pretty simple thing to do with Tropo and Nodester. Tropo has an NPM module available for adding Voice, SMS, and Instant Messaging to Node.JS applications and Nodester has REST APIs available to report on the status of the platform. 25 lines of Node.JS code later, we now have an Node.JS application using the Tropo API to dial and sms the API to retrieve the status of the platform.

Here’s the phone number: (480) 428-8723 to call or SMS.

Install the Tropo WebAPI and Mikeal Rogers’ Request NPM modules:

npm install tropo-webapi -g
npm install request -g

Run this code on localhost or deploy it to a Node.JS hosting service like Nodester.

var http = require('http');
var tropowebapi = require('tropo-webapi');
var request = require('request');

http.createServer(function (req, res) {

	// Create a new instance of the TropoWebAPI object.
	var tropo = new tropowebapi.TropoWebAPI(); 	

	// Fetch Nodester status -> http://api.nodester.com/status
	// returns {"status":"up","appshosted":2878,"appsrunning":1759}
	request('http://api.nodester.com/status', function (error, response, body) {
	     if (!error && response.statusCode == 200) {

	       // console.log(body) // Print status
	       var statusreq = JSON.parse(body);

	       tropo.say('nodester is ' + statusreq["status"] + ' and hosting ' + statusreq["appshosted"] + ' applications with '+ statusreq["appsrunning"] + ' running at the moment ');

	       res.writeHead(200, {'Content-Type': 'application/json'}); 
           res.end(tropowebapi.TropoJSON(tropo));
	     }
	   })

}).listen(13151);

One of the really cool things about the Tropo API is that you can write your app one time and it automatically runs on multiple communications channels such as: Voice, SMS, and Instant Message.

Customer Spotlight: Zapier

Friday, December 16th, 2011

We are excited to feature Zapier on this week’s Tropo Customer Spotlight! Today I sat down with Wade Foster, one of the co-founders of Zapier, to discuss their business and learn more about how they are using Tropo for their Instant Messaging services.

What is Zapier?

Zapier allows you to “zap your apps!” You can build unique integrations between your favorite applications, one mouse click at a time without writing a single line of code!

  • Own Your Data: Zapier makes it easy to import and export data automagically with your favorite web apps. Don’t get locked in.
  • No Data Entry: Quit filling out the same information between different applications, and let Zapier do the heavy lifting for you.
  • Fill-in Missing Features: Never be at the mercy of vendors to build features or integrations. Use Zapier to add missing functionality.

Zapier uses Python, Django, and the Tropo Scripting API to deliver Instant Messaging services to users on AIM, GTalk, MSN, and Yahoo!

To learn more about Zapier, visit their website at http://zapier.com!

Here is a screencast of Zapier using Tropo for their Instant Messaging services:

Introducing TropoVBX

Wednesday, November 16th, 2011

As you may recall, Disruptive Technologies recently extended the capabilities of OpenVBX (the open source cloud PBX software) to run on our Tropo cloud communications platform. The original blog post announcing this project was entitled, “Jailbreaking OpenVBX“. This title was chosen carefully because at the time of the post, OpenVBX only ran on a single cloud platform. Disruptive Technologies was able to extend the communications layer of this application to not only add support for Tropo but also simplify future efforts involved in adding support for other platforms such as Asterisk, FreeSwitch, and others.

As it turns out, the original repository maintainers declined to accept Disruptive Technologies’ GitHub pull request to merge the code bases and asked that the name of the new project be changed, effectively requesting a formal fork of the open source project. Here is the new GitHub repository for TropoVBX.

The TropoVBX fork still provides support for multiple platforms – including the platform of the original repository maintainer. Disruptive Technologies will also be merging updates from the original fork where possible and continuing to add new features to TropoVBX as time permits. Because TropoVBX now runs on the Tropo platform, there are many new and advanced features only supported Tropo which include:

  1. Speech Recognition in 24 languages
  2. Text-to-Speech in 24 languages with male and females voices for each
  3. Support for biometrics on password resets
  4. Ability to route Skype calls into TropoVBX
  5. Ability to support true SIP VoIP in and out of the platform
  6. Phono web phone integration
  7. International SMS
  8. Phone numbers in 41 countries
  9. Multiple phone numbers supported per callflow
  10. Large conference calls

Please feel free to clone, contribute, and fork the new TropoVBX project and use our logo as you see fit. Our version of this project will remain truly open in every sense of the word and spirit of open source.

Customer Spotlight: Radish Systems

Friday, November 11th, 2011

We are proud to feature Radish Systems on this week’s Tropo Customer Spotlight. I sat down with Theresa Szczurek and Dick Davis to discuss their ChoiceView platform and how they are using Tropo.

Choice View from Radish Systems is a giant step forward in enhancing traditional voice-powered IVR calls. In fact, they may have coined the term “Visual IVR” because you can now see and interact with the IVR call flow from your smart phone. ChoiceView is available today and runs on iPhone and Android-powered devices.

In addition to automated Visual IVR calls, customer service and support agents can interact with callers live during the call and even push web pages or order forms to the device while the caller is on the phone call. Here is a video of a call center agent upselling Theresa on a larger bouquet of flowers.

Radish Systems also discusses their new REST API in the works that will allow any voice-powered Tropo application to add a ChoiceView Visual IVR dimension to their existing IVR application to help drive customer interaction costs down while improving customer experience and increasing revenues! Sounds like a win-win-win for everyone involved.

To learn more about ChoiceView from Radish Systems, visit their website at http://radishsystems.com.

Customer Spotlight: OneReach

Thursday, October 20th, 2011

I was privileged to have the opportunity of moderating the Tropo Customer Spotlight session at the Voxeo Customer Summit in Orlando, Florida last week. Six customers each gave a brief presentation on their business followed by a discussion on how they are using Tropo to deliver their Voice, SMS, and Instant Messaging services.

We were fortunate to be able to sit down with Rich Weborg and Heath Phillips of OneReach afterwards to discuss their business in more detail. OneReach provides an easy solution for managing your customer communications using customized voice, text messaging, email and social networking channels to engage your customers with meaningful information in ways they appreciate. Without further ado, here’s our interview.

Extending GoogeVoice with Tropo

Friday, May 13th, 2011

We are always excited to see developers using Tropo to extend GoogleVoice functionality and features by adding things like SIP and Call Forwarding and Call-In enhancements.  Terry Swanson (@FunnyBoy243) is one of these cool developers who wrote 2 of these extensions and opensourced them for others to share and contribute:

His Call Forwarding Extender Tropo Script includes the following features that extend/add to the current Google Voice feature-set:

  1. Easy forwarding to SIP Numbers (especially compared to IPKall)
  2. Outbound call recoding
  3. Allows forwarding to numbers that cannot be verified through Google Voice (such as numbers with extensions).  You can append “postd=DIGITSp” and/or “pause=WAITTIMEms” in the CALL_DEST variable to allow the script to forward to your extension. For example, “+14155551212;postd=ppppp1234pp56″ would dial (415) 555-1212 wait 5 seconds (1 second for each p) dial 1 2 3 4, wait 2 seconds then dial 5 6. Look enter the Parameters section of the Tropo API for more information.

You can have this script call multiple SIP/Telephone numbers at the same time by using an array for the CALL_DEST variable. All numbers will ring and the first to answer the call will take the call.

Example: $CALL_DEST = array(“sip:2233486745@sip2sip.info”, “sip:2233486712@sip2sip.info”);

For step by step instructions, check out Terry’s original post here.

His Google Voice Call In Extender Tropo Script includes the following features that extend/add to the current Google Voice feature-set:

  1. SIP Address for your Google Voice number.
  2. Skype number for your Google Voice number.
  3. Phone Number Aliases for your Google Voice number – You can have multiple phone numbers from different areas forward to the same Google Voice number so they wont have to pay long distance fees to call your Google Voice number.

Here are some additional tips and tricks with this extension:

  1. You can have this script call multiple Google Voice numbers at the same time by using an array for the GV_NUM variable. All numbers will ring and the first to answer the call will take the call. Example: $GV_NUM = array(“5103364032″, “5103364002″);
  2. You can add International Phone numbers to allow people from other countries to call your Google Voice number without paying International rates.
  3. You can use the Skype number to make free telephone calls using Google Voice.

For step by step instructions, check out Terry’s original post here.

Hats off to you, Terry!  Keep up the good work!

Tropo-Powered Hamradio Callsign Lookup App

Wednesday, April 6th, 2011

Ham radio or amateur radio communications has been around since the early 1900s.  Ham radio technology has kept pace with traditional communications and may even be the only technology that allows people to communicate in natural disasters.  Ham radio operators can communicate over very far distances using HF (high frequencies) as well as through satellites via AMSAT and even using VoIP over the Internet using EchoLink, IRLP, or D-STAR!

There are nearly 750,000 FCC licensed ham radio operators in the United States and over 3M licensed operators worldwide.  Each operator has federally issued callsign that is used to uniquely identify the station operating on the band.

Using Tropo and Callook (Josh Dick’s W1JDD Callsign API), Chris Matthieu (N7ICE) was able quickly develop a speech recognition and text-to-speech based telephony app that is accessible by any of the following channels:

Voice and SMS: 1-480-374-3234

Skype: +990009369991489376

VoIP / SIP: sip:9991489376@sip.tropo.com

Phono: app:9991489376

Upon calling the application, you are asked to spell a callsign using military phonetics:

A – Alfa, B – Bravo, C – Charlie, D – Delta, E – Echo, F – Foxtrot, G – Golf, H – Hotel, I – India, J – Juliet, K – Kilo, L – Lima, M – Mike,  N – November, O – Oscar, P – Papa, Q – Quebec, R – Romeo, S – Sierra, T – Tango, U – Uniform, V – Victor, W – Whiskey, X – X-Ray, Y – Yankee, Z – Zulu

In addition to these commands, you can say restart to start over or stop if your callsign is entered correctly.  Upon saying stop, the Tropo application does a REST-based call to Callook to get a JSON response of the data related to the callsign inquired.  In addition to the communication channels listed above, Chris Matthieu was able to use his handheld hamradio (like the one featured above) to communicate using VHF (very high frequencies) to connect to a repeater nearly 50 miles away on a mountaintop and connect to Tropo via an auto-patch phone line to perform a callsign lookup.  Here is a screencast and source code for the application!

Here is the source code running on Tropo’s Scripting API:

require 'rest_client'
require 'json'

answer
sleep 2
say "welcome to the tropo ham radio call sign lookup application"

callsign = ""
callsigntext = ""

loop do

  result = ask "spell the callsign phonetically. say stop when done or restart to start over", {
      :choices => "alpha, bravo, charlie, delta, echo, foxtrot, golf, hotel, india, juliette, kilo, lima, mike, november, oscar, papa, quebec, romeo, sierra, tango, uniform, victor, whiskey, xray, yankee, zulu, one, two, three, four, five, six, seven, eight, nine, zero, stop, restart"}

  if result.value == "stop"
    break
  elsif result.value == "restart"
    callsign = ""
    callsigntext = ""
  else
    callsigntext = callsigntext + " " + result.value
    say "so far you entered #{callsigntext}"

    letter = case result.value
     when "alpha" then "a"
     when "bravo" then "b"
     when "charlie" then "c"
     when "delta" then "d"
     when "echo" then "e"
     when "foxtrot" then "f"
     when "golf" then "g"
     when "hotel" then "h"
     when "india" then "i"
     when "juliette" then "j"
     when "kilo" then "k"
     when "lima" then "l"
     when "mike" then "m"
     when "november" then "n"
     when "oscar" then "o"
     when "papa" then "p"
     when "quebec" then "q"
     when "romeo" then "r"
     when "sierra" then "s"
     when "tango" then "t"
     when "uniform" then "u"
     when "victor" then "v"
     when "whiskey" then "w"
     when "xray" then "x"
     when "yankee" then "y"
     when "zulu" then "z"
     when "one" then "1"
     when "two" then "2"
     when "three" then "3"
     when "four" then "4"
     when "five" then "5"
     when "six" then "6"
     when "seven" then "7"
     when "eight" then "8"
     when "nine" then "9"
     when "zero" then "0"
    end

    if letter
      callsign = callsign + letter
    end

  end

end

response = RestClient.get 'http://callook.info/' + callsign + '/json'
data = JSON.parse(response)

say callsigntext + "belongs to "
say data["name"]
say "in " + data["address"]["line2"]
say "and holds a " + data["current"]["operClass"] + " license"

Customer Highlight :: Opiniator

Tuesday, April 5th, 2011

Most businesses have a customer defection issue where customers try the product, service or venue once, never to return. This has a massive cash impact on the business as new customers need to be recruited to replace the ones that leave. More worryingly, most businesses have no idea why customers defect so they cant repair whatever is broken in the offer – so customers continue to leave

This is the problem that Portland based, Opiniator is helping solve and is using Tropo as its backbone technology.

Businesses can now collect point of experience feedback from their customers whilst they are consuming the product or experiencing the service. They do this via SMS, voice or any internet enabled device – via Tropo, on the customer’s own cell phone or web enabled device.

Opiniator takes this feedback data and analyzes it in real-time, whilst the customer is still there. This means that the business can fix any issues, salvage any customer and ensure the offer is satisfying the needs of it’s customer base.

Founded by Matt Selbie, the company launched in 2009 but switched to Tropo earlier this year. Retail, Financial Services, Medical, Auto and Events are the key markets for the company – with current clients including Planned Parenthood and  the Oregon Convention Center.

“The big benefits are that the business is getting analyzed feedback on what the customer is experiencing right there and then – which means they can fix, adjust and implement based on real data, not guesswork and Tropo’s platform allows us to do this quickly and with scale using a variety of convenient methods for the customers” – Matt Selbie, Founder

Send a Fax with your Voice!

Monday, February 21st, 2011

Tropo just recently partnered with PamFax to deliver faxing capabilities via an API.  Jason Goecke wrapped their API with a very simple Ruby gem called pamfaxr available at GitHub and installable using a “gem install pamfaxr” from your command line.  Using the PamFaxr Ruby gem, I will demonstrate how to send a simple fax as well as how to build a Tropo Voice to Fax transcription application using our Scripting API!

Getting Started

Before you can start sending faxes, you need to head over to the PamFax site and sign up for a PamFax account. After you fill out and submit the form, you’ll get an email with your login credentials and how to get started.

You also need to install the Ruby gem called pamfaxr on to the system where you are going to run the application that will send the fax. The Ruby gem is available at GitHub and should install simply by typing “gem install pamfaxr” from your command line. You will need to edit the code to have your PamFax username and password.

Sending A Fax From The Command Line

Before we involve Tropo, here is the Ruby/Sinatra code for simply sending a fax from the command line using the PamFaxr gem:

require 'rubygems'
require 'pamfaxr'

# Pass user name and password
pamfaxr = PamFaxr.new :username => 'your_username',
                      :password => 'secret'

# Create a new FaxJob
faxjob = pamfaxr.create_fax_job

# Add the cover sheet
covers = pamfaxr.list_available_covers
pamfaxr.set_cover(covers['Covers']['content'][1]['id'], 'Chris was here 2!')

# Add files
# pamfaxr.add_remote_file('https://s3.amazonaws.com/pamfax-test/R-intro.pdf')
# pamfaxr.add_file('examples/R-intro.pdf')

# Add a recipient
pamfaxr.add_recipient('+14802191300')

# Loop until the fax is ready to send
loop do
  fax_state = pamfaxr.get_state
  break if fax_state['FaxContainer']['state'] == 'ready_to_send'
  sleep 5
end

# Send the fax
pamfaxr.send_fax

Just copy that code into a text file, edit it to have your information in it and then run it with ruby from your command line. In a short bit you should have a fax waiting for you.

Sending Faxes From Tropo

Now for the fun Tropo Voice to Fax application code! The first code snippet is written in Ruby runs on the Tropo cloud. It greets the caller, asks for your fax number, records your voice/fax message and sends the transcription via a callback to the Ruby/Sinatra application that sends the actual fax.  Here’s the Tropo code:

say "Welcome to the Tropo fax demo.", :voice => 'dave'

result = ask "What's your fax number? Please include your country code.", {
   :choices => "[11 DIGITS]", :voice => 'dave'}

record "Please say what you would like for me to fax.", {
    :beep => false,
    :voice => 'dave',
    :maxTIme => 60,
    :silenceTimeout  => 2,
    :transcriptionOutURI => "http://web1.tunnlr.com:11053/transcribe?fax=" + result.value
    }

say "Your voice is being converted to a facsimily!  Go check your fax machine!  Goodbye.", :voice => 'dave'

hangup

Here is the complimentary Ruby/Sinatra code that catches the Tropo transcription callback and sends the fax of the transcription to the number specified in the Tropo script using the PamFaxr gem as demonstrated above. This code needs to be run on a publicly-accessible web server to which Tropo can connect and send the data. You have several options including:

  • Running the code on your own publicly-available webserver
  • Running the code on a hosting service like Heroku
  • Running the code on your local machine and use a service like Tunnlr to make the service available

Once you have the Ruby/Sinatra code below running in one of those locations, you’ll just update the Tropo code above with the correct URL (on line 11).

The code is here:

require "rubygems"
require "sinatra"
require 'json'
require 'pamfaxr'

pamfaxr = PamFaxr.new :username => 'your_username',
                      :password => 'secret'

post "/transcribe" do

  transcript_json = JSON.parse(request.body.read)
  identifier = transcript_json['result']['identifier']
  transcript = transcript_json['result']['transcription']

  # Create a new FaxJob
  faxjob = pamfaxr.create_fax_job

  # Add the cover sheet
  covers = pamfaxr.list_available_covers
  pamfaxr.set_cover(covers['Covers']['content'][1]['id'], transcript)

  # Add a recipient
  pamfaxr.add_recipient('+' + params[:fax])

  # Loop until the fax is ready to send
  loop do
    fax_state = pamfaxr.get_state
    break if fax_state['FaxContainer']['state'] == 'ready_to_send'
    sleep 5
  end

  # Send the fax
  pamfaxr.send_fax

end

Wow, that was fun!  I hope that you enjoyed this demonstration and I hope that you find both our PamFaxr gem and our Tropo Scripting API useful and powerful.

How to Build a VoIP-Based Baby Monitor

Thursday, February 17th, 2011

Two members of the Phono/Tropo team, and soon a third member, have recently added new babies to their families. Congratulations Mark, Justin, and John!

All of this excitement got the hacker in me thinking…  What would a modern Baby Monitor look like today?  Armed with the Phono and Tropo APIs, I started hacking and 2 hours later had the following example application to share with you!  Here’s the link to the demo.  Let us know what you think! http://phonophone.heroku.com/babymonitor.html

Phono, the jQuery WebPhone from the Tropo team, runs in the web browser to monitor activity in the room where it is running.  Tropo is used to manage the baby monitor’s conference room (based on the access code) and the dial-in numbers to listen to the baby monitor via PSTN, Skype, SIP, or iNum.  The Phono side of the conference is unmuted so you can hear activity while the Tropo side of the conference is muted.  You can have many people (Mom, Dad, Grandparents, etc.) dialed in listening to the same baby monitor using any combination of the access channels listed above.

Check out the Phono Blog to learn more about this demo and see the source code!