Archive for March, 2010

How-To: Sending an outbound SMS from Tropo

Monday, March 29th, 2010

The ability to notify your users via SMS is a powerful feature, and one Tropo makes very simple for our developers! To start you need to create a new application, via the ‘Application Manager’ in your Tropo account:

appMGR.png

So once you created your new outbound SMS application you then need to get a token, which is a self-service feature! All you need to do is look down once you are in your newly created application. For this tutorial you will want to add an SMS token, but if you are interested in Voice you can read more about that here in our documentation.

tokenBefore.png

So once you have provisioned a token you will see a GUID, which you will want to copy to your clipboard (we’ll need this in a bit).

tokenAfter.png

The next thing you need to do is add an SMS enabled number, otherwise you will not be able to send messages. Doing this requires you just hit the ‘add new number’ button, and then select from our pool of SMS enabled numbers.

So now what? Glad you asked, now it’s time to deploy our code, don’t worry it’s really simple. So we have a great Ruby example in the Call method’s documentation, which we’ll use to send our message. Just go ahead and copy and paste it into your application to give it a test drive:

numberToMessage = $numberToMessage
log "@"*10 + "Sending Message to: " + numberToMessage

call numberToMessage,{ :channel  => 'TEXT',
                       :network  => 'SMS'}

say 'Here is your friendly SMS message'
hangup

Then simply take the following URL, substitute your tokenID, and hit enter and watch the SMS magic! As your applications complexity grows you can start to look into other means of launching tokens, such as CURL, but thats another topic entirely =)

 http://api.tropo.com/1.0/sessions?action=create&token=yourMessagingToken&numberToMessage=14075551212

Also please be aware that due to carrier restrictions SMS enabled numbers only allow for a maximum of 10 SMS messages per minute 60 SMS messages per minute (1 per second), and as a developer you are responsible for throttling your applications. If you need more then this once you goto production please contact our sales team to discuss other options, such as purchasing a shortcode. HAVE FUN!

Regards,

John Dyer Customer Engineer Voxeo Support

Simplicity and Power

Sunday, March 28th, 2010

“Simple things should be simple, complex things should be possible.” – Alan Kay

One of the things we’ve done with Tropo is balanced simplicity and power. We’ve made it easy to build a basic application, including speech recognition. Our API uses intelligent defaults, ensuring that for most applications you don’t have to configure every detail. We’ve done it for you already. And we’ve taken complex concepts like voice recognition grammars and created simpler languages for writing them.

Consider if you have an application that asks a caller for their credit card number, expiration date, and three digit CCV security code. Here’s the code (in Javascript) you might use for that, assuming that a card number is 16 digits long.

ask('What is your credit card number?', {choices: '[16 DIGITS]'});
ask('What is the expiration month?', {choices: 'January, February, March, April, May, June, July, August, September, October, November, December'});
ask('What is the expiration year?', {choices: '2010, 2011, 2012, 2013, 2014'});
ask('What is your C C V code?', {choices: '[3 DIGITS]'});

Pretty simple, right?

Now lets start looking at how you can extend your app by drilling into Tropo’s powerful API.

A number of CVV codes are 4 digits instead of 3. We need to handle both cases. Easy enough.

ask('What is your C C V code?', {choices: '[3-4 DIGITS]'});

Now you’d like to validate that the credit card number passes MOD10 before you accept it. So you’d like to add a validation routine.

event = ask('What is your credit card number?', {
choices: '[16 DIGITS]', 
onChoice: function( event ) { validateCard(event.choice) }
})

Now you notice that people tend to pause a lot when saying their number and Tropo takes their silence to mean they’re done giving it. You can adjust the silence timeout.

event = ask('What is your credit card number?', {
choices: '[16 DIGITS]', 
silenceTimeout: 10 }
})

Perhaps for added security, you don’t want people saying their number out loud, so you restrict it to touch tone input.

ask('Using your telephone keypad, please enter your credit card number.', {
choices: '[16 DIGITS]', 
mode: 'dtmf'
})

Now that you’re doing DTMF input, maybe you want the caller to tell you they are done, instead of waiting for the system to recognize it.

ask('Using your telephone keypad, please enter your credit card number. Press pound when finished.', {
choices: '[16 DIGITS]', 
mode: 'dtmf',
terminator: '#'
})

In your usability testing, you find that callers are starting immediately entering their card number, and you have instructions you want to make sure they hear first. So you don’t want to accept input until you’re done asking the question.

ask('Using your telephone keypad, please enter your credit card number.', {
choices: '[16 DIGITS]', 
bargein: false
})

Most of your calls come in the morning, and you notice a high number of declined transactions because your callers tend to talk with a mouth full of cereal when they give their expiration month. Tropo keeps thinking they say ‘November’ when they’ve really said ‘December’. To combat this, you can tell Tropo to be more confident in it’s recognition, repeating the question up to five times if it’s not sure.

ask('What is the expiration month?', {
choices: 'January, February, March, April, May, June, July, August, September, October, November, December',
minConfidence: '0.9',
repeat: 5
});

Some callers say their expiration month as a number instead of the month name. So you add support for that.

ask('What is the expiration month?', {
choices: 'January(1, 01, january), February(2, 02, february), ... December(12, december)'
});

You’d really like to allow a caller to give their expiration date all at once, instead of asking for the month and year separately. But how do you write a grammar that can do that? Tropo supports a number of sophisticated grammar formats that can be used to write very powerful grammars. An example is a credit card expiration grammar that we’ve built as a sample.

Put that grammar at a URL and replace your choices with a URL, and Tropo will fetch that grammar for you and use it.

ask('When does your credit card expire?', {
choices: 'http://example.com/credit_card_expiration.gsl'
});

Tropo uses the content type of the file to figure out what type of grammar it is. Don’t have your web server set up to serve “gsl” as the right content type? No problem you can give Tropo a hint.

ask('When does your credit card expire?', {
choices: 'http://example.com/credit_card_expiration.gsl;type=text/gsl'
});

Those are just some of the things you can do with Tropo’s Ask function. All of Tropo’s other functions have the same simplicity with access to the raw power underneath. And all these things work on either the Scripting API or the WebAPI.

Of course, you don’t need to do any of these things if you don’t want. Tropo handles the simple cases just fine without any configuration on your part. But this way, as you develop your app on Tropo, you can be confident that your application can grow to handle anything you want to throw at it.

Teaching Your Application to Really Talk

Friday, March 26th, 2010

Speech Synthesis, otherwise known as Text to Speech (TTS), is a technology that quickly synthesizes a human voice using text as input. Speech synthesis  is the default behavior for voice calls on the Tropo platform. The Tropo ‘say‘ verb is the one that provides the TTS capability, by taking a string of text and speaking it back. It is of course possible for this verb to take a URL to a ‘wav’ or ‘mp3′ file for pre-recorded audio to be played as well.

When it comes to teaching your application to speak we follow the Perl ethos of making “the simple things easy and difficult things possible”. So your application may speak very well with the simplicity of our APIs, or it may be as sophisticated and emotional as you like through Tropo exposing powerful capabilities for giving your voices character.

For our first example we will simply say:

say 'I like squirrels!'

Which then renders this audio.

Next, we may choose from a voice that speaks any number of languages supported by Tropo (US/UK English, Castilian/Mexican Spanish, French, German, Italian & Dutch). Lets give French a try for our next example:

say "J'aime les écureuils!", :voice => 'florence'

Which then renders this audio.

Now, those were the simple examples that anyone may use to add a little speech to their applications. But, remember, we also make the difficult possible for those who want to really make their characters speak. As sometimes simply customizing the voice is not enough. There are cases when you’d also like control over pitch, volume and intonation. Tropo natively supports a standard called the Synthesized Speech Markup Language (SSML).

The Speech Synthesis Markup Language (SSML) is a W3C standard for controlling the pace, tone, pitch and all around sound of computer generated voices. Here’s a Ruby script that repeats the same sentence four times; each at a gradually lower speed:

answer 
say "<speak> I like squirrels!. 
I <prosody rate='-10%'>like squirrels!</prosody> 
I <prosody rate='-30%'>like squirrels!</prosody>  
I <prosody rate='-50%'>like squirrels!</prosody> 
</speak>"  
hangup

Which renders this audio. The previous example made use of the rate property of the SSML prosody element to control the playback speed. There are many other elements and attributes you may use, including: emphasis, phoneme, etc. To learn more about SSML and related technologies check out the W3C site at http://www.w3.org/TR/speech-synthesis/.

If you would like to call in and listen to these examples live, you may do so by dialing +990009369991429940 on Skype (free) or calling +1.408.940.5920 from any phone. What are you waiting for? Get started by signing up for an always free developer account @ Tropo.com.

Transcriptions: how to do it and use it!

Friday, March 26th, 2010

So you have got a great application, it does all this fancy stuff and now you want to add transcriptions, but how? Well its actually quite simple! Transcriptions in Tropo are sent as a XML body, via POST, to the URL specified in the transcriptionOutURI parameter of the recording method. So below I have taken an example from our blog which showed how to actually do a transcription using the the record method.

answer
say 'Welcome to ruby recording test'

event = record('Say something after the beep.',
{ :repeat              => 0,
:bargein             => true,
:beep                => true,
:silenceTimeout      => 2,
:maxTime             => 30,
:timeout             => 4.03456789,
:recordURI           => 'http://tropo.to-a-domain.com/post_audio?filename=file123456.wav',
:transcriptionOutURI => 'http://tropo.to-a-domain.com/transcriptions/tropoTranscribeCatch.php',
:transcriptionID     => '123456' })

log 'Recorded file: ' + event.recordURI
say 'Thanks for your testing ruby on Tropo platform'
hangup 

So you can go ahead and deploy this bad boy to your hosted account and map it up to an application! So once this is done you need something on the other end to catch the transcription…what to do??!! Well I have a little example, which is also plug and play, that may be just what you are looking for! To start you simply deploy this little bit of ‘PHP Goodness ™’ to your webserver. This script will take the posted data, access the relevant nodes, and write it to disk for you.

<?
date_default_timezone_set('EST');

$obj = json_decode(@file_get_contents('php://input'));

$myFile = $obj->result->guid."-".$obj->result->identifier.".txt"; // Unique file name

touch ($myFile); 

$fh = fopen($myFile, 'a');

fwrite($fh, "Time Stamp:" . date('D, d M Y H:i:s T') . "\n");
// access XML data 
fwrite($fh, "Guid " . $obj->result->guid . "\n");
fwrite($fh, "Identifier: " . $obj->result->identifier . "\n");
fwrite($fh, "Transcription: " . $obj->result->transcription . "\n");
fwrite($fh,"________________________________________\n");
fclose($fh);

?>



Few tips that may help as well:

  • You may want to make sure your webserver has write permissions to the directory were you will be saving transcriptions
  • (chmod -R 775 /var/htdocs/transcriptions/)).
  • Make sure your PHP install is at least PHP 5.2, as the json_decode extension used in this example requires it.



I really hope this helps, and if there are any questions please feel free to contact our support team. We are most certainly always here to help!

Regards,

John Dyer
Customer Engineer
Voxeo Support

Testing a Tropo app with Twitter? Remember that Twitter rejects duplicate tweets…

Friday, March 26th, 2010

Just a quick note… if you have decided to try building a Tropo app that interacts with Twitter, perhaps based on our blog posts about how to add Twitter to a Tropo app and how to make a Tropo app react differently per channel, you may want to be aware in your testing that Twitter rejects duplicate tweets sent in a quick time period. This Twitter Support ticket has the info:

http://help.twitter.com/forums/10713/entries/68809

I got bit by this yesterday testing the weather app I outlined in those blog posts. As I was modifying the code, I was tweeting out the same ZIP code to test the differences:

@danweathertest 32801
@danweathertest 32801
@danweathertest 32801

and didn’t understand why the subsequent tweets just… disappeared. I was using TweetDeck and it was only when I tried tweeting from the actual Twitter web site that I saw a quick error message pop up that pointed me to that support ticket.

Obviously if you do not tweet the same exact text, you are okay. In my case, I just started using other ZIP codes… like “90210″ and “12345″. (the latter being Schenectady, NY, of all places!)

An Example of How to Make a Tropo App Respond Differently to Different Channels (including Twitter)

Thursday, March 25th, 2010

Would you like to have your Tropo.com app respond differently depending upon which communications channel is used to connect to the app? Would you like to, for instance, have the app provide more of an introduction to voice callers but not for text channels like IM, SMS or Twitter?

Earlier today, I wrote about how to add Twitter support to a Tropo app and at the end of the piece I mentioned that my Yahoo!Weather sample application responded with more messages that I really wanted it to send via Twitter. In this post, I will show how you can use the “currentCall” session variable to tweak your app to respond differently depending upon which channel is being used.

First, let’s look at how the app originally responded via IM to a ZIP code:

tropobyIM.jpg

After one IM to the app I received seven responses! Not good. Perhaps in IM it might be okay, but in SMS or Twitter it is a bit too verbose.

REMOVING EXTRA MESSAGES IN TEXT MODE (BUT NOT IN VOICE)

If you look at those messages, the first and last messages are “extra” messages that introduce the app to the user and then clue the user into the fact that the app is done. We could just eliminate them, but then, particularly with the final message, we’re being kind of rude to the person who is calling in. We are just giving the report and hanging up. Perfectly fine in a text-based interaction, but not great for a voice interaction.

To modify the app to respond differently according to channels, we need to use the “currentCall” session variable. With that variable you have access to the parameters of the “callObject, including, most relevant to this issue, “channel“. So in python, my personal language of choice, I can add this at the beginning:

if currentCall.channel == "VOICE":
    say( "Welcome to the Tropo dot com sample Yahoo weather app." )

and this at the end:

if currentCall.channel == "VOICE":
    say( "Thats all. Goodbye!" )

With those two additions, I’ve now made it so that if you call the application at +1 (407) 374-3994 you will hear those phrases but if you use a text channel (SMS, IM or Twitter) you will not see those messages.

I then went through the python code and eliminated the multiple “say” commands so that the location, time, temperature and condition were all written on one line. The result is that now the interaction is down to 2 messages:

tropobyIM2.jpg

MORE TWEAKING FOR VOICE

This is obviously better, but notice that first message “Enter the ZIP code...“. If you hear that in a voice call, will you realize that you could either enter the ZIP code in digits on your keypad or say the ZIP code? Probably not… you probably think you can only use DTMF digits. So let’s change the prompt a bit:

if currentCall.channel == "VOICE":
    say( "Welcome to the Tropo dot com sample Yahoo weather app." )
    result = ask( "Please say or enter the ZIP code for a weather check", { 'choices' : "[5 DIGITS]" })
else:
    result = ask( "Enter the ZIP code for a weather check", { 'choices' : "[5 DIGITS]" })

Now we have a more friendly prompt for voice that clues people in to the fact that they can either enter digits or use speech recognition.

REMOVING THE INITIAL PROMPT IF DATA IS PROVIDED

The next step is obviously to get rid of that initial “Enter the ZIP code...” prompt for a text channel if a ZIP code is sent in the initial message. This points to a major difference between voice and text channels. With voice, you need to have that initial prompt. With text, the user can already know what they need to send and just send that data along.

The currentCall session variable also has a “initialText” parameter that includes the text sent by the user. So I can see that the next step I need to do is something like:

If currentCall.initialText is a valid ZIP code, don’t send the first prompt. If currentCall.initialText is NOT a valid ZIP code, or is just general text, do send the initial prompt.

Unfortunately: 1) I have to leave in a few minutes to catch a plane to fly back to my home in NH; and 2) I’ve been spending more of my days writing in PowerPoint versus python, so my coding is a bit rusty. My first reaction is just to do a try / except but I know I’ll need to play with it a bit. So I’ll tweak it some more later.

PLAYING WITH THE CODE

If you are a pythonista, you’re welcome to play with my sample app. I uploaded it to Github at:

http://github.com/danyork/tropo-twitter-weather-sample

If you come up with an elegant way to get rid of that initial prompt, I’ll be glad to write about your solution here.

And if you create a similar app in another language, I’m also glad to write about that here as well.

USING OTHER currentCall OPTIONS

Beyond “channel” and “initialText” there are a number of other interesting parameters found on the callObject reference page. While currentCall.channel lets you broadly differentiate between voice and text channels, currentCall.network lets you get even more granular and respond to specific channels differently. And of course currentCall.callerID is always a useful variable to have around.

With that, I’ve got a plane to catch… stay tuned for more…

How to Add Twitter Support to a Tropo.com App – Step by Step

Thursday, March 25th, 2010

With our new announcement of support for Twitter in Tropo.com apps, I thought I’d walk through the steps of adding Twitter support to an app.

I’ve got a basic “Yahoo weather” app that I copied from the Tropo tutorials and sample apps. You can call it today at “(407) 374-3994″, send it SMS at the same number, (407) 374-3994, or use Jabber IM to contact it at “danyahooweather@tropo.im”. You give it a US ZIP code (try “32801″ for Orlando) and it gives you a summary of weather.

Now I want to add Twitter support.

STEP 1: Login to your Twitter Account (either a new or existing one).

Obviously you first need a Twitter account to link to your app. You can use an existing Twitter account or, like I did, create a new one: @danweathertest. The next steps work best if you login to this account on Twitter.com before proceeding.

STEP 2: Start the Twitter activation process in Tropo.com.

Next you login to Tropo.com, click on the “Account” link and open up the application you want to link to Twitter (or create a new app – try one of the samples if you don’t have an app yet). At the bottom of the application info, you’ll see the tabs for the different channels you can use – click the Twitter “t” icon:

tropotwitter1-s.jpg

Just click the link to “activate Twitter”:

tropotwitter2-1.jpg

STEP 3: Allow the Tropo app access to your Twitter account.

You will now be taken to Twitter.com to complete the OAuth authentication process. If you did login to your (new or existing) Twitter account back in Step 1, all you need to do is click the “Allow” button. If you didn’t, or are logged into the wrong Twitter account, you’ll need to sign out of Twitter and login with the correct account.

tropotwitter3-s.jpg

After you click “Allow”, you will be redirected back to Tropo.com where you will see the message after a moment that Twitter has been successfully activated:

tropotwitter4-s.jpg

STEP 4: CELEBRATE!

That’s it! You’re done!

Welllll… you might want to test your app a bit to make sure that it works well with Twitter. For instance, when I send a tweet to my Yahoo weather bot:

@danweathertest 03431

I get back a flow of multiple messages:

tropotwitter5-s.jpg

Now maybe that is what you want… maybe it’s not. I think ideally it would summarize that report into a single tweet… but that’s an application implementation detail that I just have to go back and work on in the python code for my app.

WRAPPING UP

In just a few steps I’ve added Twitter support to an existing Tropo.com app so that this one single Tropo application can be reached by any of these channels:

Voice:

+1 (407) 374-3994
Skype: +99000936 9991438833
SIP: sip:9991438833@sip.tropo.com
INum: +883510001814088

SMS: (407) 374-3994
Jabber IM: danyahooweather@tropo.im
Twitter: danweathertest

Now I could go on and add a MSN account, AOL account, etc., but for the purposes of this example I’ll leave it at that.

That’s all there is to it… take out a Twitter account, do the OAuth dance, and there you are! I look forward to seeing what kind of Twitter-related apps you all create!

Tropo Adds Twitter and goes International

Thursday, March 25th, 2010

Tropo is all about making it easy for you to interact with your customers. What if you could write one application and communicate with your customers via voice, instant messaging (IM), text message (SMS) and even Twitter? And what if they could call that application from anywhere in the world and talk with it in their own language?

Welcome to the new Tropo.com release today!

Tropo was already the easiest way to build voice-powered phone applications. Today, the Tropo cloud communications platform goes into full production launch with a suite of new features including:

  • TWITTER SUPPORT – You can now assign a Twitter name to your application and customers can interact with the app by simply sending a Twitter message to that name. Your app will see all messages to the Twitter account and can take action on messages that are received. Want to set up an app to do customer support over Twitter? Want to make your web application be able to service Twitter users? Now you can. Simple and easy and all secured by OAuth, too. Read more:
  • INTERNATIONAL PHONE NUMBERS – No longer are Tropo phone numbers limited to North America. Now for a low monthly fee you can get numbers in over 30 countries: Austria, Belgium, Brazil, Croatia, Czech Republic, Denmark, Estonia, Finland, France, Germany, Greece, Ireland, Israel, Japan, Latvia, Lithuania, Luxembourg, Malta, Mexico, Netherlands, New Zealand, Norway, Panama, Peru, Poland, Portugal, Slovakia, Slovenia, Spain, Switzerland and the United Kingdom.
  • INTERNATIONAL OUTBOUND DIALING – Naturally if you can accept inbound calls from other countries you can also make outbound calls to virtually any country around the world. Making international calls? Ask us for our international rates.
  • INTERNATIONAL TEXT-TO-SPEECH – All those fancy new international numbers deserves some fancy new language support, too. A simple flag in your code lets you change the voice used for text-to-speech to any of these languages: US English, UK English, Dutch, French, German, Italian, Mexican Spanish or Castilian Spanish. Read more:
  • INTERNATIONAL SPEECH RECOGNITION – Tropo.com has always supported automatic speech recognition (ASR) in English so that you can have your callers talk back to your app instead of having to punch their touchtone responses in… now we’ve added ASR support for more languages: UK English, Dutch, French, German, Italian, Mexican Spanish or Castilian Spanish.
  • SMS SUPPORT – Does your app have a US number? The exact same phone number you use to call your app can also be used to receive and reply to SMS messages. Want to broadcast an announcement or send a user some alerts? Your app can send SMS messages, too. Connect the millions of mobile users to your application now. It’s the same API as your voice application, so you don’t need to write two different apps. Read more:
  • IM and CHAT SUPPORT – You can add instant messaging accounts to your app and communicate via AOL’s AIM, Yahoo!Messenger, Microsoft’s Live Messenger, GoogleTalk or any XMPP or Jabber IM service. We’ll even give you a nifty “tropo.im” Jabber ID for your app. Like SMS, IM uses the same API as your voice apps. No extra coding required.
  • TOLL-FREE PHONE NUMBERS – Want to make your app accessible to everyone in North America at no cost to them? Add a toll-free number. And because you shouldn’t have to pay extra just to provide your customers with more convenience, calls to toll free numbers are priced the same as local numbers.
  • NEW REST/JSON WEB API – Beyond the hosted scripting Tropo has always offered, you can now host your application on your own web server, write it in whatever language you choose and communicate through our RESTful web API using JSON. Read more:
  • ONE-CLICK MOVE TO PRODUCTION – After you have developed your app and want it to go live, it’s just one click in the web interface to move it into production. No contracts, no calls into a salesperson. Simply go into the web management interface and flip the switch. That’s it.

Beyond the new features, Tropo continues to offer the following:

  • FREE DEVELOPER ACCOUNTS – No need to provide a credit card. No need to purchase credits just to try out your apps. We let you sign up completely for free… get free North American phone numbers, free outbound calling, free support… Just head over to Tropo.com to sign up now.
  • SKYPE, SIP and INUM NUMBERS – We know that the world of voice calling is moving beyond the legacy Public Switched Telephone Network (PSTN). When you create an app on Tropo, you immediately get (at no extra charge) a Skype number, a SIP address and an iNum number to let people call your app from all those newer networks, too.
  • FREE DEVELOPER SUPPORT – We don’t call our support team the “Customer Obsession Team” for nothing… they are obsessed with making sure you get the information you need to make your apps successful and they’re doing it around the clock.
  • TROPO SCRIPTING – If you don’t want to host your application on your own web server you can easily host it on our cloud in Ruby, JavaScript, Python, PHP or Groovy.
  • VOXEO’S REAL-TIME CLOUD INFRASTRUCTURE – Tropo.com runs on top of Voxeo’s worldwide cloud infrastructure that is optimized for real-time communications and will ensure your calls and messages go through.

We’re very excited that Tropo has gone live and we’re looking forward to seeing what you all do with it. Why not start now? Head over to Tropo.com and create an account. Or, if you are an existing user, login and check out all the new features you can add to all your existing applications.

Meet Tropo at CloudCamp Vancouver

Wednesday, March 10th, 2010

Tropo will be at Cloud Camp Vancouver this Saturday talking cloud communications APIs. We’re sponsoring the event and Adam Kalsey will be there, participating in sessions and showing off Tropo’s services for voice, IM, and SMS in the cloud.

If you’re in the Vancouver area and interested in cloud computing, come on by this free event.

What will you do at Cloud Camp? You will learn how to take advantage of cloud computing to do things you could not do before, to save money, to be more flexible and agile. You can get your questions answered about security, privacy, and compliance. You can learn about and understand the differences between public cloud, private cloud, and hybrid clouds. Hear from your peers who are building and developing on the cloud about how they have stopped buying and installing and maintaining physical servers.

CloudCamp is a free full-day “unconference” where early adopters of Cloud Computing technologies exchange ideas. With the rapid change occurring in the industry, we need a place where we can meet to share our experiences, challenges and solutions. At CloudCamp, you are encouraged to share your thoughts in several open discussions, as we strive for the advancement of Cloud Computing.

Details and free registration on the CloudCamp site.

Does your cloud provider offer SIP for full interop?

Tuesday, March 9th, 2010

What is SIP and why do I care?

Tropo sits in Voxeo’s live communications cloud; an environment specifically designed for real-time voice, instant messaging and SMS applications. On the voice side, a key feature of the Tropo platform is its extensive support for SIP. The Session Initiation Protocol is a Voice over IP (VoIP) technology enabling two ends of a conversation (or session) to negotiate media formats much like the Accepts/Content-Type header does for HTTP.

As a voice provider, SIP is the best way to guarantee seamless interoperability between existing phone systems, carriers and call centers. Not having SIP is like playing Call of Duty on a 15” with no HDMI. Sure it technically works…. but why?!?

Read on for real world example.

Tropo + AsteriksIn this example, Acme Flowers has an Asterisk based phone system that rings two sales people (Bob and Alice) when a call comes in on 555-1212. Before integrating with Tropo, the phone system would simply drop the caller into voicemail if no one was available.

Tropo FTW! With a couple tweaks, callers are now automatically transferred to a voice-driven menu in the Tropo cloud, providing them with driving directions, order status and store hours all over the Internet, all with industry leading speech synthesis and speech recognition. No extra phone line. No additional telco charges. On top of that, customers get all the same services via SMS and IM using the same exact code!

SIP allows Tropo applications to seamlessly integrate with existing phone systems and call centers over the Internet; cutting the telco out entirely!

Enabled on every app!

Tropo assigns a personal SIP address for every application. This special address is accessible from any modern phone system or SIP-enabled device. You can also use  a soft phone like SJPhone for Mac/PC or iSIP / fring for the iPhone.

Give it a try now by calling my demo app at sip:9991429776@sip.tropo.com

SIP Headers

Ever been asked for your account information 20 times only to be transferred to a live person who has no idea who you are or why you’re calling? The problem lies in that most phone systems are a black box, blindly sending calls from one department to another. SIP solves this problem by allowing phone systems to exchange information in between hops. 

SIP borrows many concepts from HTTP; one of which is the concept of a header. When SIP endpoints communicate, they send key/value pairs that help route the call. Wouldn’t it be nice if you could leverage this pipeline to communicate non-telephony data? With Tropo, you certainly can. 

Tropo exposes SIP headers to your application on every incoming call allowing your application to easily integrate with other systems.

Further reading

To learn more about SIP and related technologies check out these sites:

That’s it for now. I hope to follow up this post with more examples of using Tropo and SIP to unlock you calls.

Until then,

Good Hunting