Archive for the ‘Uncategorized’ Category

International Male (Voices)

Tuesday, April 20th, 2010

Since going international a few weeks ago, we’ve had some requests for more text to speech (TTS) voices. In our launch, we provided eight female voices in various languages and dialects. A number of customers have inquired about male voices for those same dialects.

They’re available starting now. Just like the female voices, each male voice is identified by a character’s name. The new voices we’ve added are:

  • jorge – Castilian Spanish – Male
  • bernard – French – Male
  • dave – US English – Male
  • simon – British English – Male
  • stefan – German – Male
  • luca – Italian – Male
  • willem – Dutch – Male
  • carlos – Mexican Spanish – Male

To use one of the new voices, just add the character’s name to your text to speech command in Tropo. For example, in PHP, you can do…

<?php
answer();
say('Comment allez-vous?', array('voice' => 'bernard'));
say('ça va bien merci.', array('voice' => 'florence'));
?>

Or in Ruby, try:

answer
say "1 2 3 4 5 my name is Dave and I'm from the U S.", :voice => 'dave'
say "Hello, Dave. I'm Simon from London.", :voice => 'simon'

Want to use one of these languages in speech recognition? Our Automated Speech Recognition (ASR) platform recognizes all of the languages we can speak, regardless if if they’re said by a man or woman.

In JavaScript:

answer();
result=ask("Quel âge avez-vous?", {
  choices:"[1-3 digits]",
  recognizer:"fr-fr",
  voice:"bernard"
  } );
if (result.name=='choice') {
  say("C'est bon. Je suis " + result.value + " ans.", {voice:"bernard"})
}

The full list of voices and documentation of how to use various TTS voices is available under the say() function.

Tropo Beta Gift

Monday, April 12th, 2010

To celebrate the production launch of Tropo, last week we sent out $10 via PayPal to everyone who had signed up for Tropo during our year-long public beta. It was our way of thanking people for helping out.

We’d love to sit down and have a cup of coffee with each of you, but since that’s not possible, we’re sending you $10. Have a cup of coffee (or three) on us.

It seems people aren’t used to generosity from a company. Reactions ranged from surprise, to thinking it was an April Fool’s joke, to outright suspicion that the PayPal payment notice email was some sort of phishing scam. A couple of people even felt guilty they hadn’t done anything with Tropo and returned the money or donated it to charity.

Rest assured, folks, this is real. Feel free to accept your PayPal payments and spend the money. No strings attached. We’re grateful for your help in testing out Tropo and recommending it to your friends and peers.

Some of our favorite reactions on Twitter:

Tropo sending us $10 bucks just for trying out their private beta, that is awful generous of them .. thx @tropoBranchcut

@tropo is awesome! They are giving me some coffee money for beta testing. Can’t wait to release our new SMS & VoIP features. - Josh Coats

@Voxeo @Tropo Thanks for build such a killer service. You rock.Terry Martin

Just got $10 via PayPal from @voxeo for testing @tropo. Now *that* is how you thank users. I can’t imagine it scales well, though.Gabe Kangas

Signup for beta. Profit. I got $10 for being in the @tropo beta program. Google, the ball’s in your court.Adam Meehan

Sweet! $10 from @voxeo for using @tropo in beta! I basically got paid to try out an awesome service!no.good.at.coding

Once again, thank you all for participating in Tropo’s beta period. We learned a lot and made some fantastic improvements to the service thanks to your feedback.

http://twitter.com/coffe4u/status/11324864968

Deutsch? French? Spanish? How To Use International Text-To-Speech (TTS) in Tropo Apps

Thursday, April 1st, 2010

Last week we announced that Tropo now included for free the ability to support Text-To-Speech in 8 languages. In this post, I want to show you how you can easily implement this in your Tropo app. First, though, if you want to hear the different voices, you can call these numbers now and try it out:

+1 (407) 374-9911
Skype: +990009369991430013
SIP: sip:9991430013@sip.tropo.com
iNum: +883510001805741

Here is what the JavaScript code looks like for that application (thanks to Voxeon Ron Blaisdell):

answer();
wait('500');

say("Hello world! This is a demonstration of the various voices & languages on Tropo.");

//English Female - Allison - en-us
say("1 2 3 4 5 this is Allison", { voice: 'allison' });

//Spanish Castillian Female - Carmen - es-es
say("1 2 3 4 5 this is Carmen", { voice: 'carmen' });

//French Female - Florence - fr-fr
say("1 2 3 4 5 this is Florence", { voice: 'florence' });

//English UK - Kate - en-uk
say("1 2 3 4 5 this is Kate", { voice: 'kate' });

//German Female - Katrin - de-de
say("1 2 3 4 5 this is Katrin", { voice: 'katrin' });

//Italian Female - Paola - it-it
say("1 2 3 4 5 this is Paola", { voice: 'paola' });

//Dutch Female - Saskia - nl-nl
say("1 2 3 4 5 this is Saskia", { voice: 'saskia' });

//American Spanish Female - Soledad - es-mx
say("1 2 3 4 5 this is Soledad", { voice: 'soledad' });

say("ta da");

hangup();

That’s literally all you need to do… add the { voice:'name' } parameter to the say function and there you go!

Now for those of you who don’t use JavaScript, the syntax is similar for the other languages.

Ruby:

say "J'aime les écureuils!", :voice => 'florence'
say "1 2 3 4 5 this in Florence", :voice => 'florence'

Python:

say ("Guten Tag!", {'voice':'katrin'})
say ("1 2 3 4 5 this is Katrin", {'voice':'katrin'})

Groovy:

say( "Hola, como estas?", [ 'voice':"carmen" ])
say( "1 2 3 4 5 this is Carmen", [ 'voice':"carmen" ])

PHP:

<?php say ("J'aime les écureuils!", array('voice'=>'florence')); ?>
<?php say ("1 2 3 4 5, this is Florence", array('voice'=>'florence')); ?>

That’s it! Simple and easy…

Today we support these languages and currently only female voices, but you can expect to see us releasing support for even more languages as well as male voices in the weeks and months ahead. And if you have a project that needs a specific voice, please do email our support team and let them know what you need.

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.

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

Tutorial – Adding Tropo to Google Wave

Tuesday, February 16th, 2010

There is another great tutorial that Zhao Lu (aka – @zlu) has done, showing how to use Tropo with Google Wave. Zhao takes JRuby, the Rave gem (created by Jason Rush, aka @diminish7) and creating a Google Wave Robot that allows you to create a callable conference in a Wave.

The complete tutorial and code example is available on Github @ http://github.com/zlu/tropo-wave-tutorial. Thanks again to Zhao!