A Ruby library for interaction with the Tropo Web API (tropo.com) using JSON.
The Tropo Remote API provides a RESTful JSON API for controlling realtime communications applications from your own web servers.
Unit tests passed on: Ruby MRI v1.8.6/1.8.7 and JRuby v1.5.0
RubyGems
Note: If using with ActiveSupport, v2.3.5 or better of ActiveSupport is required.
$ sudo gem install tropo-webapi-ruby
Optional, if you would like to use with Sinatra:
$ sudo gem install sinatra
$ gemserver
$ sudo gem install yard
From within the project:
$ yardoc
require'rubygems'require'tropo-webapi-ruby'# Will return the properly formatted JSON to pass to Troporesponse = Tropo::Generator.ask({ :say=>'Hello world!' }) # Will return a Ruby Hash, with some transformations, from the JSON string received from Troporesponse = Tropo::Generator.parse(json_string) # Will provide instance variables that will allow you to easily reference session typetropo = Tropo::Generator.newresponse = tropo.parse(json_string) p'Hey, this is a voice session!'iftropo.voice_sessionp'Hey, this is a text messaging session!'iftropo.text_session
Using the great RESTful Web Services framework Sinatra for Ruby.
require'rubygems'require'sinatra'require'tropo-webapi-ruby'post'/helloworld.json'doTropo::Generator.say'Hello World!'endpost'/helloworld_block.json'dotropo = Tropo::Generator.newdosay'Hello World!'endtropo.responseendpost'/helloworld_twice.json'dotropo = Tropo::Generator.newtropo.say'Hello World!'tropo.say'Hello again.'tropo.responseend
# Produces a Ruby hash:## { :session => # { :timestamp => Tue Jan 19 18:27:46 -0500 2010, # :user_type =>"HUMAN", # :initial_text => nil,# :account_id =>"0", # :headers => [{ "value" => "70", "key"=>"Max-Forwards" }, # { "value" => "385", "key"=>"Content-Length" }, # { "value" => "<sip:127.0.0.1:49152>", "key"=>"Contact" }, # { "value" => "replaces", "key"=>"Supported" }, # { "value" => "<sip:sample.json@localhost:5555>", "key"=>"To" }, # { "value" => "1 INVITE", "key"=>"CSeq" }, # { "value" => "SJphone-M/1.65.382f (SJ Labs)", "key"=>"User-Agent" }, # { "value" => "SIP/2.0/UDP 127.0.0.1:49152;branch=z9000000a9;rport=49152", "key"=>"Via" }, # { "value" => "3FA7C70A1DD211B286B7A583D7B46DDD0xac106207", "key"=>"Call-ID" }, # { "value" => "application/sdp", "key"=>"Content-Type" }, # { "value" => "unknown <sip:127.0.0.1:49152>;tag=750b1b1648e9c876", "key"=>"From" }],# :id => "3FA7C70A1DD211B286B7A583D7B46DDD0xac106207", # :to => { :network => "PSTN", # :channel => "VOICE", # :name => "unknown", # :id => "sample.json"}, # :from => { :network => "PSTN", # :channel => "VOICE", # :name => "unknown", # :id => "unknown"}}}#post'/start_session.json'dotropo_session = Tropo::Generator.parserequest.env["rack.input"].readptropo_sessionend
post'/ask.json'dotropo = Tropo::Generator.newdoon:event=>'hangup', :next=>'/hangup.json'on:event=>'continue', :next=>'/answer.json'ask({ :name=>'account_number', :bargein=>true, :timeout=>30, :require=>'true' }) dosay:value=>'Please say your account number'choices:value=>'[5 DIGITS]'endendtropo.responseend# Produces a Ruby hash, if the user gives a response before hanging up:## { :result => # { :actions => { :attempts => 1, # :disposition => "SUCCESS", # :interpretation => "12345", # :confidence => 100, # :name => "account_number", # :utterance => "1 2 3 4 5" }, # :session_duration => 3, # :error => nil, # :sequence => 1, # :session_id => "5325C262-1DD2-11B2-8F5B-C16F64C1D62E@127.0.0.1", # :state => "ANSWERED", # :complete => true } }#post'/answer.json'dotropo_event = Tropo::Generator.parserequest.env["rack.input"].readptropo_eventend# Produces a Ruby hash, if the user hangs up before giving a reponse# { :result => # { :actions => {}, # :session_duration => 1, # :error => nil, # :sequence => 1, # :session_id => "812BEF50-1DD2-11B2-8F5B-C16F64C1D62E@127.0.0.1", # :state => "DISCONNECTED", # :complete => true } }#post'/hangup.json'dotropo_event = Tropo::Generator.parserequest.env["rack.input"].readptropo_eventend
# A redirect methodpost'/redirect.json'doTropo::Generator.redirect({ :to=>'sip:1234', :from=>'4155551212' }) end
# A reject methodpost'/reject.json'doTropo::Generator.rejectend
post'/speak.json'dot = Tropo::Generator.new(:voice=>'kate') t.say'Hello!'# Will speak as kate now# ort = Tropo::Generator.newt.voice = 'kate't.say'Hello!'# Will speak as kate nowend
post'/ask.json'dot = Tropo::Generator.new(:recognizer=>'fr-fr') t.ask({ :name=>'account_number', # Will now use the French speech recognition engine:bargein=>true, :timeout=>30, :require=>'true' }) dosay:value=>"S'il vous plaît dire votre numéro de compte", :voice=>'florence'choices:value=>'[5 DIGITS]'end# ort = Tropo::Generator.newt.recognizer = 'fr-fr't.ask({ :name=>'account_number', # Will now use the French speech recognition engine:bargein=>true, :timeout=>30, :require=>'true' }) dosay:value=>"S'il vous plaît dire votre numéro de compte", :voice=>'florence'choices:value=>'[5 DIGITS]'endend
May be found by checking out the project from Github, and then looking in $PROJECT_HOME/examples and $PROJECT_HOME/spec/tropo-webapi-ruby_spec.rb.
API Documentation:
voxeo.github.com/tropo-webapi-ruby
Tropo Web API Documentation
docs.tropo.com/webapi/2.0/home.htm
In order to maintain compatibility between Ruby MRI and JRuby the gem requires ‘json_pure’. If you are using the Ruby MRI and would prefer to use the C version of ‘json’, simply install the ‘json’ gem as follows:
sudogeminstalljson
Copyright © 2010 Voxeo, Corporation. See LICENSE for details.