Posts Tagged ‘telephony’

SF Telephony meetup

Monday, June 28th, 2010

SF Telephony Inaugural Meetup - San Francisco Telephony Group (San Francisco, CA) - Meetup.com.jpgCome join Tropo and a bunch of people interested in building telephony apps and products in San Francisco Wednesday night.

Zhao Lu from Orange Labs and creator of OpenVoice has organized the San Francisco Telephony Meetup and the first meetup has a bang-up agenda.

Gabriel Sidhom CTO, Orange Labs – Introduction

Jason Goecke, VP of Innovation at Voxeo Labs, will talk about Tropo & Moho – An open-source cloud communications platform that helps developers to create multi-channel real-time communications apps from the cloud or on your own open-source instance.

Adrian Georgescu, CEO of AG Projects Introduction to SIP2SIP.info - Free SIP accounts for the masses - Self-organizing SIP server infrastructure - Remote provisioning API based on SOAP/XML

Chris Matthieu, the Founder of Teleku.com, will introduce the new cloud communication start-up’s RESTful web service APIs which allow web developers to write sophisticated phone applications using PhoneML, TwiML, or VoiceXML that run on any carrier’s network as well as their own free open-souce telephony stack called Ninja.

Dan Miller (Opus Research, 10min), Opus Research: Intro to Recombinant Communications (RC), what it is and what opportunities it presents to developers, incumbent carriers, wireless enterprise IT/app managers.

James Li/Dominic Lee (Orange Labs) – What else can you do while watching TV

Darren Schreiber (15min): an open-source, distributed cloud platform for putting distributed FreeSWITCH nodes on disparate servers. It’s written in Erlang mostly and utilizes some cool messaging and data storage technologies, including NoSQL.

A handful of Tropo people will be on hand, including me (Adam Kalsey), Jason Goecke, and John Higgins. RSVP on meetup.com and come join us.

June 30, 2010 at 6:30pm
Orange Labs
801 Gateway Blvd Suite 500
South San Francisco

Talking to the Cloud, and the Cloud Talking Back

Friday, August 28th, 2009

One of the great things about Tropo is that it has a speech recognition and text to speech engine built right in. This allows a user to speak commands to your voice application and respond to them with dynamically generated content. We make every effort to make these features robust and yet simple to use for developers.

In the first case, we will ask the user to provide their zipcode and then play it back to them:

  answer
  options = { 'choices'     => '[5 DIGITS]',
              'repeat'      => 3,
              'onBadChoice' => lambda { say 'That is not a zip code, please try again.'} }
  choice = ask 'Please enter your zip code.', options

  # Add spaces to speak back individual digits, rather than one number
  zipcode = String.new
  choice.value.split(//).each { |char| zipcode << char + ' ' }
  say "Your zip code is #{zipcode}. Goodbye."

The key to this is the option ‘choices’, which is where we may pass our simple grammar to prompt the user. In this case we are asking the speech recognition engine to ask for up to [5 DIGITS] and the user may then either use their phone’s touch tone keypad or speak their response. We then take that response, which comes back as a string, and add spaces in between the numbers so that it is spoken back as you would a zipcode as opposed to a single number.

Now that is for digits, of course one may always use their telephone to enter digits you say. Now lets look at asking our customer questions:

  
answer
  options = { 'choices'     => 'cheese, pepperoni, vegetarian',
              'repeat'      => 3,
              'onChoice'    => lambda { |choice| say "We will send you a #{choice.value}
                                                      pizza. Goodbye." },

              'onBadChoice' => lambda { say 'We do not have that kind of pizza,
                                             please try again.'} }
  choice = ask 'Which pizza would you like to order?', options

In this case we are passing the ‘choices’ option a string that provides multiple spoken choices that the user may speak to have a valid response. We are then playing that response back to the user when we recognize it as the value is populated in ‘choices.value’.

That was for simple multiple choice, what if more than one phrase may qualify for a single response?:

  
answer
  options = { 'choices'     => 'denver broncos(broncos, denver, denver broncos),
                                dallas cowboys(cowboys, dallas, dallas cowboys)',
              'repeat'      => 3,
              'onChoice'    => lambda { |choice| say "A so you like the #{choice.value}
                                                      do you?. Goodbye." },
              'onBadChoice' => lambda { say 'We do not have that team, please try again.'} }
  choice = ask 'Who is your favorite football team?', options

First off, I am not making any statements about NFL teams here, just shortening the choices for the purposes of brevity.  In this case we are passing the ‘choices’ option a string that contains the responses we expect (ie – denver broncos) with a series of possible spoken phrases inside the parenthesis that could qualify. When one of those phrases is recognized, the qualifying value gets populated in the ‘choices.value’.

So what are you waiting for? Start talking with your users. There are many more examples in multiple languages may be found here.