tropo-webapi-ruby 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.7
|
@@ -73,7 +73,9 @@ module Tropo
|
|
73
73
|
# @return [String] the Ruby string camelized
|
74
74
|
def camelize(ruby_string)
|
75
75
|
split_string = ruby_string.split('_')
|
76
|
-
split_string[0] + split_string[1].capitalize
|
76
|
+
return_string = split_string[0] + split_string[1].capitalize
|
77
|
+
return_string = return_string + split_string[2].capitalize if split_string[2]
|
78
|
+
return_string
|
77
79
|
end
|
78
80
|
|
79
81
|
##
|
@@ -127,7 +129,7 @@ module Tropo
|
|
127
129
|
params.each_pair do |k,v|
|
128
130
|
if k.to_s.include? "_"
|
129
131
|
k = camelize k.to_s
|
130
|
-
k = k.to_sym
|
132
|
+
k = k.to_sym if k
|
131
133
|
end
|
132
134
|
hash.merge!({ k => v })
|
133
135
|
end
|
@@ -76,6 +76,44 @@ module Tropo
|
|
76
76
|
end
|
77
77
|
alias :prompt :ask
|
78
78
|
|
79
|
+
##
|
80
|
+
# Prompts initiates a new call. May only be used when no call is active.
|
81
|
+
#
|
82
|
+
# @overload call(params)
|
83
|
+
# @param [Hash] params the options to create a call action request with.
|
84
|
+
# @option params [String] :to the destination of the call, may be a phone number, SMS number or IM address
|
85
|
+
# @option params [optional, String] :from the phone number or IM address the call will come from
|
86
|
+
# @option params [optional, String] :network which network the call will be initiated with, such as SMS
|
87
|
+
# @option params [optional, String] :channel the channel the call will be initiated over, may be TEXT or VOICE
|
88
|
+
# @option params [optional, Integer] :timeout (30) the amount of time, in seconds, to wait for a response before moving on
|
89
|
+
# @option params [optional, Boolean] :answer_on_media (true)
|
90
|
+
# @options params [optional, Hash] :headers A set of key/values to apply as customer SIP headers to the outgoing call
|
91
|
+
# @options params [optional, Hash] :recording Refer to the recording method for paramaters in the hash
|
92
|
+
# @overload ask(params, &block)
|
93
|
+
# @param [Hash] params the options to create an message action request with.
|
94
|
+
# @param [Block] takes a block so that you may trigger actions, such as a say, on a specific event
|
95
|
+
# @option params [String] :to the destination of the call, may be a phone number, SMS number or IM address
|
96
|
+
# @option params [optional, String] :from the phone number or IM address the call will come from
|
97
|
+
# @option params [optional, String] :network which network the call will be initiated with, such as SMS
|
98
|
+
# @option params [optional, String] :channel the channel the call will be initiated over, may be TEXT or VOICE
|
99
|
+
# @option params [optional, Integer] :timeout (30) the amount of time, in seconds, to wait for a response before moving on
|
100
|
+
# @option params [optional, Boolean] :answer_on_media (true)
|
101
|
+
# @options params [optional, Hash] :headers A set of key/values to apply as customer SIP headers to the outgoing call
|
102
|
+
# @options params [optional, Hash] :recording Refer to the recording method for paramaters in the hash
|
103
|
+
# @return [String, nil] the JSON string to be passed back to Tropo or nil
|
104
|
+
# if the method has been called from inside a block
|
105
|
+
def call(params={}, &block)
|
106
|
+
if block_given?
|
107
|
+
create_nested_hash('call', params)
|
108
|
+
instance_exec(&block)
|
109
|
+
@response[:tropo] << @nested_hash
|
110
|
+
else
|
111
|
+
hash = build_action('call', params)
|
112
|
+
@response[:tropo] << hash
|
113
|
+
end
|
114
|
+
render_response if @building.nil?
|
115
|
+
end
|
116
|
+
|
79
117
|
##
|
80
118
|
# Choices to give the user on input
|
81
119
|
#
|
@@ -146,6 +184,45 @@ module Tropo
|
|
146
184
|
end
|
147
185
|
alias :disconnect :hangup
|
148
186
|
|
187
|
+
##
|
188
|
+
# Message initiates a new message to a destination and then hangs up on that destination. Also takes a say method
|
189
|
+
# in order to deliver a message to that desintation and then hangup.
|
190
|
+
#
|
191
|
+
# @overload message(params)
|
192
|
+
# @param [Hash] params the options to create a message action request with.
|
193
|
+
# @option params [String] :to the destination of the call, may be a phone number, SMS number or IM address
|
194
|
+
# @option params [optional, String] :from the phone number or IM address the call will come from
|
195
|
+
# @option params [optional, String] :network which network the call will be initiated with, such as SMS
|
196
|
+
# @option params [optional, String] :channel the channel the call will be initiated over, may be TEXT or VOICE
|
197
|
+
# @option params [optional, Integer] :timeout (30) the amount of time, in seconds, to wait for a response before moving on
|
198
|
+
# @option params [optional, Boolean] :answer_on_media (true)
|
199
|
+
# @options params [optional, Hash] :headers A set of key/values to apply as customer SIP headers to the outgoing call
|
200
|
+
# @options params [optional, Hash] :recording Refer to the recording method for paramaters in the hash
|
201
|
+
# @overload ask(params, &block)
|
202
|
+
# @param [Hash] params the options to create an message action request with.
|
203
|
+
# @param [Block] takes a block so that you may trigger actions, such as a say, on a specific event
|
204
|
+
# @option params [String] :to the destination of the call, may be a phone number, SMS number or IM address
|
205
|
+
# @option params [optional, String] :from the phone number or IM address the call will come from
|
206
|
+
# @option params [optional, String] :network which network the call will be initiated with, such as SMS
|
207
|
+
# @option params [optional, String] :channel the channel the call will be initiated over, may be TEXT or VOICE
|
208
|
+
# @option params [optional, Integer] :timeout (30) the amount of time, in seconds, to wait for a response before moving on
|
209
|
+
# @option params [optional, Boolean] :answer_on_media (true)
|
210
|
+
# @options params [optional, Hash] :headers A set of key/values to apply as customer SIP headers to the outgoing call
|
211
|
+
# @options params [optional, Hash] :recording Refer to the recording method for paramaters in the hash
|
212
|
+
# @return [String, nil] the JSON string to be passed back to Tropo or nil
|
213
|
+
# if the method has been called from inside a block
|
214
|
+
def message(params={}, &block)
|
215
|
+
if block_given?
|
216
|
+
create_nested_hash('message', params)
|
217
|
+
instance_exec(&block)
|
218
|
+
@response[:tropo] << @nested_hash
|
219
|
+
else
|
220
|
+
hash = build_action('message', params)
|
221
|
+
@response[:tropo] << hash
|
222
|
+
end
|
223
|
+
render_response if @building.nil?
|
224
|
+
end
|
225
|
+
|
149
226
|
##
|
150
227
|
# Sets event handlers to call a REST resource when a particular event occurs
|
151
228
|
#
|
@@ -224,6 +301,7 @@ module Tropo
|
|
224
301
|
# @option params [optional, String] :format (audio/wav) the audio format to record in, either a wav or mp3
|
225
302
|
# @option params [optional, String] :username if posting to FTP, the username for the FTP server
|
226
303
|
# @option params [optional, String] :password if posting to FTP, the password for the FTP server
|
304
|
+
# @option params [optional, Hash] :transcription parameters used to transcribe the recording
|
227
305
|
# @overload record(params, &block)
|
228
306
|
# @param [Hash] params the options to create a message with.
|
229
307
|
# @param [Block] takes a block so that you may trigger actions, such as a say, on a specific event
|
@@ -232,6 +310,7 @@ module Tropo
|
|
232
310
|
# @option params [optional, String] :format (audio/wav) the audio format to record in, either a wav or mp3
|
233
311
|
# @option params [optional, String] :username if posting to FTP, the username for the FTP server
|
234
312
|
# @option params [optional, String] :password if posting to FTP, the password for the FTP server
|
313
|
+
# @option params [optional, Hash] :transcription parameters used to transcribe the recording
|
235
314
|
# @option [String, nil] the JSON string to be passed back to Tropo or nil
|
236
315
|
# if the method has been called from inside a block
|
237
316
|
def record(params={}, &block)
|
@@ -449,4 +449,74 @@ describe "Tropo" do
|
|
449
449
|
tropo.text_session.should == true
|
450
450
|
end
|
451
451
|
|
452
|
+
it "should generate a valid JSON string for a call method" do
|
453
|
+
json_result = "{\"tropo\":[{\"call\":{\"recording\":{\"password\":\"passwd\",\"username\":\"jose\",\"method\":\"POST\",\"url\":\"http://foobar\",\"format\":\"audio/mp3\"},\"timeout\":10,\"network\":\"SMS\",\"channel\":\"TEXT\",\"to\":\"foo\",\"from\":\"bar\",\"headers\":{\"foo\":\"foo\",\"bar\":\"bar\"},\"answerOnMedia\":false}}]}"
|
454
|
+
tropo = Tropo::Generator.call({ :to => 'foo',
|
455
|
+
:from => 'bar',
|
456
|
+
:network => 'SMS',
|
457
|
+
:channel => 'TEXT',
|
458
|
+
:timeout => 10,
|
459
|
+
:answer_on_media => false,
|
460
|
+
:headers => { :foo => 'foo', :bar => 'bar' },
|
461
|
+
:recording => { :url => 'http://foobar',
|
462
|
+
:method => 'POST',
|
463
|
+
:format => 'audio/mp3',
|
464
|
+
:username => 'jose',
|
465
|
+
:password => 'passwd' } })
|
466
|
+
JSON.parse(tropo).should == JSON.parse(json_result)
|
467
|
+
end
|
468
|
+
|
469
|
+
it "should generate a valid JSON string for a message method" do
|
470
|
+
hash_result = {"tropo"=>[{"message"=>{"say"=>[{"value"=>"Please say your account number"}], "from"=>"bar", "timeout"=>10, "to"=>"foo", "network"=>"SMS", "answerOnMedia"=>false, "channel"=>"TEXT", "recording"=>{"format"=>"audio/mp3", "method"=>"POST", "url"=>"http://foobar", "username"=>"jose", "password"=>"passwd"}, "headers"=>{"foo"=>"foo", "bar"=>"bar"}}}]}
|
471
|
+
tropo = Tropo::Generator.message({ :to => 'foo',
|
472
|
+
:from => 'bar',
|
473
|
+
:network => 'SMS',
|
474
|
+
:channel => 'TEXT',
|
475
|
+
:timeout => 10,
|
476
|
+
:answer_on_media => false,
|
477
|
+
:headers => { :foo => 'foo', :bar => 'bar' },
|
478
|
+
:recording => { :url => 'http://foobar',
|
479
|
+
:method => 'POST',
|
480
|
+
:format => 'audio/mp3',
|
481
|
+
:username => 'jose',
|
482
|
+
:password => 'passwd' } }) do
|
483
|
+
say :value => 'Please say your account number'
|
484
|
+
end
|
485
|
+
JSON.parse(tropo).should == hash_result
|
486
|
+
end
|
487
|
+
|
488
|
+
it "should generate a valid JSON string for a record method with a transcription request" do
|
489
|
+
hash_result = {"tropo"=>[{"record"=>{"name"=>"foo", "transcription"=>{"email_format"=>"encoded", "url"=>"mailto:jose@voxeo.com", "id"=>"bling"}, "say"=>[{"value"=>"Please say your account number"}], "beep"=>true, "url"=>"http://sendme.com/tropo", "exitTone"=>"#", "sendTones"=>false, "choices"=>{"value"=>"[5 DIGITS]"}}}]}
|
490
|
+
tropo = Tropo::Generator.record({ :name => 'foo',
|
491
|
+
:url => 'http://sendme.com/tropo',
|
492
|
+
:beep => true,
|
493
|
+
:send_tones => false,
|
494
|
+
:transcription => { :id => 'bling',
|
495
|
+
:url => 'mailto:jose@voxeo.com',
|
496
|
+
:email_format => 'encoded' },
|
497
|
+
:exit_tone => '#' }) do
|
498
|
+
say :value => 'Please say your account number'
|
499
|
+
choices :value => '[5 DIGITS]'
|
500
|
+
end
|
501
|
+
JSON.parse(tropo).should == hash_result
|
502
|
+
end
|
503
|
+
|
504
|
+
it "should properly generate a JSON document when calling an ask with says as hash elements rather than as methods" do
|
505
|
+
hash_result = {"tropo"=>[{"ask"=>{"name"=>"donate_to_id", "say"=>[{"event"=>"timeout", "value"=>"Sorry, I did not hear anything."}, {"event"=>"nomatch:1 nomatch:2 nomatch:3", "value"=>"Sorry, that wasn't a valid answer. You can press or say 1 for 'yes', or 2 for 'no'."}, {"value"=>"You chose organization foobar. Are you ready to donate to them? If you say no, I will tell you a little more about the organization."}, {"event"=>"nomatch:3", "value"=>"This is your last attempt."}], "bargein"=>true, "silenceTimeout"=>10, "timeout"=>10, "attempts"=>4, "choices"=>{"value"=>"true(1,yes,sure,affirmative), false(2,no,no thank you,negative), 0(0,help,i do not know, agent, operator, assistance, representative, real person, human), 9(9,quit,stop,shut up)"}}}]}
|
506
|
+
help_stop_choices = "0(0,help,i do not know, agent, operator, assistance, representative, real person, human), 9(9,quit,stop,shut up)"
|
507
|
+
yes_no_choices = "true(1,yes,sure,affirmative), false(2,no,no thank you,negative), " + help_stop_choices
|
508
|
+
|
509
|
+
t = Tropo::Generator.new
|
510
|
+
t.ask :name => 'donate_to_id',
|
511
|
+
:bargein => true,
|
512
|
+
:timeout => 10,
|
513
|
+
:silence_timeout => 10,
|
514
|
+
:attempts => 4,
|
515
|
+
:say => [{:event => "timeout", :value => "Sorry, I did not hear anything."},
|
516
|
+
{:event => "nomatch:1 nomatch:2 nomatch:3", :value => "Sorry, that wasn't a valid answer. You can press or say 1 for 'yes', or 2 for 'no'."},
|
517
|
+
{:value => "You chose organization foobar. Are you ready to donate to them? If you say no, I will tell you a little more about the organization."},
|
518
|
+
{:event => "nomatch:3", :value => "This is your last attempt."}],
|
519
|
+
:choices => { :value => yes_no_choices}
|
520
|
+
JSON.parse(t.response).should == hash_result
|
521
|
+
end
|
452
522
|
end
|
data/tropo-webapi-ruby.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{tropo-webapi-ruby}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jason Goecke"]
|
12
|
-
s.date = %q{2010-04-
|
12
|
+
s.date = %q{2010-04-29}
|
13
13
|
s.description = %q{Ruby library for interacting with the Tropo Web API via REST & JSON}
|
14
14
|
s.email = %q{jsgoecke@voxeo.com}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tropo-webapi-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Goecke
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-04-
|
12
|
+
date: 2010-04-29 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|