telapi 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/.gitignore +20 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +22 -0
  4. data/README.md +162 -0
  5. data/Rakefile +1 -0
  6. data/lib/telapi.rb +24 -0
  7. data/lib/telapi/account.rb +14 -0
  8. data/lib/telapi/application.rb +88 -0
  9. data/lib/telapi/available_phone_number.rb +24 -0
  10. data/lib/telapi/call.rb +214 -0
  11. data/lib/telapi/caller_id.rb +16 -0
  12. data/lib/telapi/carrier.rb +16 -0
  13. data/lib/telapi/conference.rb +206 -0
  14. data/lib/telapi/configuration.rb +40 -0
  15. data/lib/telapi/error.rb +22 -0
  16. data/lib/telapi/fraud.rb +79 -0
  17. data/lib/telapi/inbound_xml.rb +36 -0
  18. data/lib/telapi/incoming_phone_number.rb +86 -0
  19. data/lib/telapi/message.rb +47 -0
  20. data/lib/telapi/network.rb +50 -0
  21. data/lib/telapi/notification.rb +29 -0
  22. data/lib/telapi/recording.rb +69 -0
  23. data/lib/telapi/resource.rb +18 -0
  24. data/lib/telapi/resource_collection.rb +38 -0
  25. data/lib/telapi/transcription.rb +44 -0
  26. data/lib/telapi/version.rb +3 -0
  27. data/spec/spec_helper.rb +17 -0
  28. data/spec/support/telapi_helpers.rb +38 -0
  29. data/spec/telapi/account_spec.rb +17 -0
  30. data/spec/telapi/application_spec.rb +69 -0
  31. data/spec/telapi/available_phone_number_spec.rb +27 -0
  32. data/spec/telapi/call_spec.rb +173 -0
  33. data/spec/telapi/caller_id_spec.rb +17 -0
  34. data/spec/telapi/carrier_spec.rb +17 -0
  35. data/spec/telapi/conference_spec.rb +174 -0
  36. data/spec/telapi/configuration_spec.rb +38 -0
  37. data/spec/telapi/error_spec.rb +32 -0
  38. data/spec/telapi/fraud_spec.rb +55 -0
  39. data/spec/telapi/inbound_xml_spec.rb +49 -0
  40. data/spec/telapi/incoming_phone_number_spec.rb +69 -0
  41. data/spec/telapi/message_spec.rb +41 -0
  42. data/spec/telapi/network_spec.rb +80 -0
  43. data/spec/telapi/notification_spec.rb +34 -0
  44. data/spec/telapi/recording_spec.rb +72 -0
  45. data/spec/telapi/resource_collection_spec.rb +64 -0
  46. data/spec/telapi/resource_spec.rb +25 -0
  47. data/spec/telapi/transcription_spec.rb +41 -0
  48. data/telapi-ruby.gemspec +32 -0
  49. metadata +227 -0
@@ -0,0 +1,20 @@
1
+ *.gem
2
+ *.rbc
3
+ .DS_Store
4
+ .bundle
5
+ .config
6
+ .rspec
7
+ .yardoc
8
+ Gemfile.lock
9
+ InstalledFiles
10
+ _yardoc
11
+ bin
12
+ coverage
13
+ doc/
14
+ lib/bundler/man
15
+ pkg
16
+ rdoc
17
+ spec/reports
18
+ test/tmp
19
+ test/version_tmp
20
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in telapi-ruby.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Phil Misiowiec
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,162 @@
1
+ # Telapi::Ruby
2
+
3
+ See www.telapi.com to signup for TelAPI.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'telapi'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install telapi
18
+
19
+ ## Authentication and Configuration
20
+
21
+ Every API request requires a valid *account_sid* and *auth_token*. By default these are set to *nil*, so your application
22
+ should set them in its configuration (e.g. Ruby on Rails initializer).
23
+
24
+ For example:
25
+
26
+ Telapi.config do |config|
27
+ config.account_sid = 'abc123'
28
+ config.auth_token = 'xyz567'
29
+ end
30
+
31
+ You can also set individual settings directly:
32
+
33
+ Telapi.config.ssl_ca_path = '/some/path'
34
+
35
+ Inspecting the current configuration returns a hash:
36
+
37
+ p Telapi.config # (or Telapi.config.inspect)
38
+ #=> {:base_uri=>"https://api.telapi.com/2011-07-01/", :ssl_ca_path=>"/some/path", :account_sid=>'abc123', :auth_token=>'xyz567'}
39
+
40
+ ## Design
41
+
42
+ Minimal code is needed to retrieve objects and perform operations. There's no need to instantiate a client object -- work directly with the desired classes.
43
+
44
+ Most classes provide identically named class and instance methods for ultimate flexibility. For example, to hang up an existing call, you can call either of the following:
45
+
46
+ call = Telapi::Call.get('123abc')
47
+ call.hangup
48
+
49
+ # avoids an additional network request
50
+ Telapi::Call.hangup('123abc')
51
+
52
+ Individual objects are wrapped into a Resource instance, which exposes all of the attributes documented in the [TelAPI documentation](http://www.telapi.com/docs/) as accessors and avoids the need to deal with direct JSON responses in your application code. A convenient *attributes* method allows you to dump out the object's values.
53
+
54
+ Telapi::Account.get.attributes
55
+ # => { ...hash of keys and values... }
56
+
57
+ Methods that return collections wrap Resource objects in a Resource Collection instance, which behaves similar to an Array, but also includes meta info about totals, page size, current page, etc.
58
+
59
+ ## Documentation
60
+
61
+ Detailed documentation can be found at [RubyDoc](http://rubydoc.info/gems/telapi/) and [the official TelAPI documentation site](http://www.telapi.com/docs/).
62
+
63
+ ## Usage Examples - REST API
64
+
65
+ Refer to the documentation for more examples.
66
+
67
+ ### Get account details
68
+
69
+ acct = Telapi::Account.get
70
+ acct.friendly_name # => "My Account"
71
+ acct.account_balance # => "25.000"
72
+
73
+ ### Get available numbers
74
+
75
+ numbers = Telapi::AvailablePhoneNumber.list('US', :AreaCode => '805')
76
+ numbers.each { |n| puts n.phone_number }
77
+ # => +18052585701
78
+ # +18052585702
79
+
80
+ ### Get list of calls
81
+
82
+ Telapi::Call.list # => returns ResouceCollection of Telapi::Call objects
83
+
84
+ ### Make a call
85
+
86
+ Telapi::Call.make('12223334444', '13334445555', 'http://mycallback...')
87
+
88
+ ### Record a call
89
+
90
+ call = Telapi::Call.get('123abc')
91
+ call.record
92
+
93
+ # or invoke the class method to avoid an additional network request
94
+ Telapi::Call.record('123abc')
95
+
96
+ ### Send an SMS message
97
+
98
+ Telapi::Message.create('12223334444', '13334445555', 'Hey you')
99
+
100
+ ### Transcribe audio
101
+
102
+ Telapi::Transcription.transcribe_audio('http://some-audio-url')
103
+
104
+ ### Caller ID
105
+
106
+ Telapi::CallerId.lookup('12223334444')
107
+
108
+ ## Usage Examples - Inbound XML
109
+
110
+ ### Say
111
+
112
+ ix = Telapi::InboundXml.new do
113
+ Say('Hello.', :loop => 3, :voice => 'man')
114
+ Say('Hello, my name is Jane.', :voice => 'woman')
115
+ Say('Now I will not stop talking.', :loop => 0)
116
+ end
117
+
118
+ ix.response
119
+
120
+ # results in the following XML:
121
+ # <?xml version="1.0"?>
122
+ # <Response>
123
+ # <Say loop="3" voice="man">Hello.</Say>
124
+ # <Say voice="woman">Hello, my name is Jane.</Say>
125
+ # <Say loop="0">Now I will not stop talking.</Say>
126
+ # </Response>
127
+
128
+ ### Play
129
+
130
+ Telapi::InboundXml.new { Play('http://example.com/hello.mp3', :loop => 3) }
131
+
132
+ ### Gather
133
+
134
+ Telapi::InboundXml.new do
135
+ Gather(:action => 'http://example.com/example-callback-url/say?example=simple.xml',
136
+ :method => 'GET',
137
+ :numDigits => '4',
138
+ :finishOnKey => '#') {
139
+ Say 'Please enter your 4 digit pin.'
140
+ }
141
+ end
142
+
143
+ ### SMS Response
144
+
145
+ Telapi::InboundXml.new do
146
+ Sms(
147
+ 'Test message sent from TelAPI!',
148
+ :action => 'http://liveoutput.com/telapi-test-sms-action',
149
+ :method => 'POST',
150
+ :from => '1112223333',
151
+ :to => '3334445555',
152
+ :statusCallback => 'http://liveoutput.com/telapi-test-status-callback'
153
+ )
154
+ end
155
+
156
+ ## Contributing
157
+
158
+ 1. Fork it
159
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
160
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
161
+ 4. Push to the branch (`git push origin my-new-feature`)
162
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,24 @@
1
+ require 'telapi/version'
2
+
3
+ require 'telapi/error'
4
+ require 'telapi/configuration'
5
+ require 'telapi/network'
6
+
7
+ require 'telapi/resource'
8
+ require 'telapi/resource_collection'
9
+
10
+ require 'telapi/account'
11
+ require 'telapi/application'
12
+ require 'telapi/available_phone_number'
13
+ require 'telapi/call'
14
+ require 'telapi/caller_id'
15
+ require 'telapi/carrier'
16
+ require 'telapi/conference'
17
+ require 'telapi/fraud'
18
+ require 'telapi/incoming_phone_number'
19
+ require 'telapi/message'
20
+ require 'telapi/notification'
21
+ require 'telapi/recording'
22
+ require 'telapi/transcription'
23
+
24
+ require 'telapi/inbound_xml'
@@ -0,0 +1,14 @@
1
+ module Telapi
2
+ # Wraps TelAPI Account functionality
3
+ class Account < Resource
4
+ class << self
5
+
6
+ # Gets current Telapi account as a Telapi::Account object
7
+ # See http://www.telapi.com/docs/api/rest/accounts/view/
8
+ def get
9
+ Account.new(Network.get)
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,88 @@
1
+ module Telapi
2
+ # Wraps TelAPI Application functionality
3
+ class Application < Resource
4
+ class << self
5
+
6
+ # Returns a resource collection containing Telapi::Application objects
7
+ # See http://www.telapi.com/docs/api/rest/applications/list/
8
+ #
9
+ # Optional params is a hash containing:
10
+ # +FriendlyName+:: string
11
+ # +Page+:: integer greater than 0
12
+ # +PageSize+:: integer greater than 0
13
+ def list(optional_params = {})
14
+ response = Network.get(['Applications'], optional_params)
15
+ ResourceCollection.new(response, 'applications', self)
16
+ end
17
+
18
+ # Returns a Telapi::Application object given its id
19
+ # See http://www.telapi.com/docs/api/rest/applications/view/
20
+ def get(id)
21
+ response = Network.get(['Applications', id])
22
+ Application.new(response)
23
+ end
24
+
25
+ # Creates an application, returning a Telapi::Application object
26
+ # See http://www.telapi.com/docs/api/rest/applications/create/
27
+ #
28
+ # Required params:
29
+ # +name+:: string
30
+ #
31
+ # Optional params is a hash containing:
32
+ # +VoiceUrl+:: valid URL
33
+ # +VoiceMethod+:: (POST) or GET
34
+ # +VoiceFallbackUrl+:: valid URL
35
+ # +VoiceFallbackMethod+:: (POST) or GET
36
+ # +VoiceCallerIdLookup+:: true or (false)
37
+ # +SmsUrl+:: valid URL
38
+ # +SmsMethod+:: (POST) or GET
39
+ # +SmsFallbackUrl+:: valid URL
40
+ # +SmsFallbackMethod+:: (POST) or GET
41
+ # +HeartbeatUrl+:: valid URL
42
+ # +HeartbeatMethod+:: (POST) or GET
43
+ # +StatusCallback+:: valid URL
44
+ # +StatusCallbackMethod+:: (POST) or GET
45
+ def create(name, optional_params = {})
46
+ opts = { :FriendlyName => name }.merge(optional_params)
47
+ response = Network.post(['Applications'], opts)
48
+ Application.new(response)
49
+ end
50
+
51
+ # Updates an application, returning a Telapi::Application object
52
+ # See http://www.telapi.com/docs/api/rest/applications/update/
53
+ #
54
+ # Required params:
55
+ # +id+:: application id
56
+ #
57
+ # Optional params is a hash supporting same options under ::create
58
+ # in addition to:
59
+ # +FriendlyName+:: string
60
+ def update(id, optional_params = {})
61
+ response = Network.post(['Applications', id], optional_params)
62
+ Application.new(response)
63
+ end
64
+
65
+ # Deletes an application, returning a Telapi::Application object
66
+ # See http://www.telapi.com/docs/api/rest/applications/delete/
67
+ #
68
+ # Required params:
69
+ # +id+:: application id
70
+ def delete(id)
71
+ response = Network.delete(['Applications', id])
72
+ Application.new(response)
73
+ end
74
+
75
+ end
76
+
77
+ # See ::update
78
+ def update(optional_params = {})
79
+ self.class.update(self.sid, optional_params)
80
+ end
81
+
82
+ # See ::delete
83
+ def delete(optional_params = {})
84
+ self.class.delete(self.sid)
85
+ end
86
+
87
+ end
88
+ end
@@ -0,0 +1,24 @@
1
+ module Telapi
2
+ # Wraps TelAPI Available Phone Number functionality
3
+ class AvailablePhoneNumber < Resource
4
+ class << self
5
+
6
+ # Returns a resource collection containing Telapi::AvailablePhoneNumber objects
7
+ # See http://www.telapi.com/docs/api/rest/available-phone-numbers/list/
8
+ #
9
+ # Required params:
10
+ # +country_code_iso+:: country code (ISO), see http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
11
+ #
12
+ # Optional params is a hash containing:
13
+ # +AreaCode+:: valid area code, e.g. 415
14
+ # +Contains+:: 0-9, lower and upper case letters of the alphabet (Aa-Zz), or *
15
+ # +InRegion+:: valid region (state or province) abbreviation
16
+ # +InPostalCode+:: valid postal code
17
+ def list(country_code_iso, optional_params = {})
18
+ response = Network.get(['AvailablePhoneNumbers', country_code_iso, 'Local'], optional_params)
19
+ ResourceCollection.new(response, 'available_phone_numbers', self)
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,214 @@
1
+ module Telapi
2
+ # Wraps TelAPI Call functionality
3
+ class Call < Resource
4
+ class << self
5
+
6
+ # Returns a resource collection containing Telapi::Call objects
7
+ # See http://www.telapi.com/docs/api/rest/calls/list/
8
+ #
9
+ # Optional params is a hash containing:
10
+ # +To+:: phone number, e.g. 7325551234
11
+ # +From+:: phone number, e.g. 7325551234
12
+ # +Status+:: ringing, in-progress, queued, busy, no-answer, or failed
13
+ # +StartTime+:: date in the following format: YYYY-MM-DD
14
+ # +Page+:: integer greater than 0
15
+ # +PageSize+:: integer greater than 0
16
+ def list(optional_params = {})
17
+ response = Network.get(['Calls'], optional_params)
18
+ ResourceCollection.new(response, 'calls', self)
19
+ end
20
+
21
+ # Returns a Telapi::Call object given its id
22
+ # See http://www.telapi.com/docs/api/rest/calls/view/
23
+ def get(id)
24
+ response = Network.get(['Calls', id])
25
+ Call.new(response)
26
+ end
27
+
28
+ # Creates a call, returning a Telapi::Call object
29
+ # See http://www.telapi.com/docs/api/rest/calls/make/
30
+ #
31
+ # Required params:
32
+ # +to+:: phone number, e.g. 7325551234
33
+ # +from+:: phone number, e.g. 7325551234
34
+ # +url+:: valid url
35
+ #
36
+ # Optional params is a hash containing:
37
+ # +ForwardedFrom+:: phone number, e.g. 7325551234
38
+ # +Method+:: (POST) or GET
39
+ # +FallbackUrl+:: valid URL
40
+ # +FallbackMethod+:: (POST) or GET
41
+ # +StatusCallback+:: valid URL
42
+ # +StatusCallbackMethod+:: (POST) or GET
43
+ # +SendDigits+:: 0-9, #, or *
44
+ # +Timeout+:: integer greater than or equal to 0 (default: 60)
45
+ # +HideCallerId+:: true or (false)
46
+ def make(to, from, url, optional_params = {})
47
+ opts = { :To => to, :From => from, :Url => url }.merge(optional_params)
48
+ response = Network.post(['Calls'], opts)
49
+ Call.new(response)
50
+ end
51
+
52
+ # Interrupts a call, returning a Telapi::Call object
53
+ # See http://www.telapi.com/docs/api/rest/calls/interrupt/
54
+ #
55
+ # Required params:
56
+ # +id+:: call id
57
+ # +url+:: valid url
58
+ # +method+:: (POST) or GET
59
+ # +status+:: canceled or (completed)
60
+ def interrupt(id, url, method = 'POST', status = 'completed')
61
+ opts = { :Url => url, :Method => method, :Status => status }
62
+ response = Network.post(['Calls', id], opts)
63
+ Call.new(response)
64
+ end
65
+
66
+ # Hangs up a call, returning a Telapi::Call object
67
+ # See http://www.telapi.com/docs/api/rest/calls/hangup/
68
+ #
69
+ # Required params:
70
+ # +id+:: call id
71
+ # +status+:: completed
72
+ def hangup(id, status = 'completed')
73
+ opts = { :Status => status }
74
+ response = Network.post(['Calls', id], opts)
75
+ Call.new(response)
76
+ end
77
+
78
+ # Sends touch tones during call, returning a Telapi::Call object
79
+ # See http://www.telapi.com/docs/api/rest/calls/send-digits/
80
+ #
81
+ # Required params:
82
+ # +id+:: call id
83
+ # +play_dtmf+:: 0-9, W, or w
84
+ # +play_dtmf_leg+:: aleg or bleg
85
+ def send_digits(id, play_dtmf, play_dtmf_leg = 'aleg')
86
+ opts = { :PlayDtmf => play_dtmf, :PlayDtmfLeg => play_dtmf_leg }
87
+ response = Network.post(['Calls', id], opts)
88
+ Call.new(response)
89
+ end
90
+
91
+ # Play audio file during call, returning a Telapi::Call object
92
+ # See http://www.telapi.com/docs/api/rest/calls/play-audio/
93
+ #
94
+ # Required params:
95
+ # +id+:: call id
96
+ # +sound_url+:: valid URL
97
+ #
98
+ # Optional params is a hash containing:
99
+ # +Length+:: integer greater than or equal to 0
100
+ # +Legs+:: aleg, bleg, or (both)
101
+ # +Loop+:: true or (false)
102
+ # +Mix+:: true or (false)
103
+ def play_audio(id, sound_url, optional_params = {})
104
+ opts = { :Sounds => sound_url }.merge(optional_params)
105
+ response = Network.post(['Calls', id, 'Play'], opts)
106
+ Call.new(response)
107
+ end
108
+
109
+ # Change caller's voice via speed and pitch of audio, returning a Telapi::Call object
110
+ # See http://www.telapi.com/docs/api/rest/calls/voice-effects/
111
+ #
112
+ # Required params:
113
+ # +id+:: call id
114
+ #
115
+ # Optional params is a hash containing:
116
+ # +AudioDirection+:: in or (out)
117
+ # +Pitch+:: value between -1 and 1, including 0
118
+ # +PitchSemiTones+:: value between -14 and 14, including 0
119
+ # +PitchOctaves+:: value between -1 and 1, including 0
120
+ # +Rate+:: value between -1 and 1, including 0
121
+ def voice_effect(id, optional_params = {})
122
+ response = Network.post(['Calls', id, 'Effect'], optional_params)
123
+ Call.new(response)
124
+ end
125
+
126
+ # Initiate or end a call recording, returning a Telapi::Call object
127
+ # See http://www.telapi.com/docs/api/rest/calls/record/
128
+ #
129
+ # Required params:
130
+ # +id+:: call id
131
+ # +record+:: (true) or false
132
+ #
133
+ # Optional params is a hash containing:
134
+ # +TimeLimit+:: integer greater than or equal to 0
135
+ # +CallbackUrl+:: valid URL
136
+ def record(id, record = true, optional_params = {})
137
+ opts = { :Record => record }.merge(optional_params)
138
+ response = Network.post(['Calls', id, 'Recordings'], opts)
139
+ Call.new(response)
140
+ end
141
+
142
+ # Returns a resource collection containing Telapi::Recording objects
143
+ # See http://www.telapi.com/docs/api/rest/recordings/list/
144
+ #
145
+ # Required params:
146
+ # +id+:: call id
147
+ #
148
+ # Optional params is a hash containing:
149
+ # +DateCreated+:: date in the following format: YYYY-MM-DD
150
+ # +Page+:: integer greater than 0
151
+ # +PageSize+:: integer greater than 0
152
+ def recordings(id, optional_params = {})
153
+ response = Network.get(['Calls', id, 'Recordings'], optional_params)
154
+ ResourceCollection.new(response, 'recordings', Recording)
155
+ end
156
+
157
+ # Returns a resource collection containing Telapi::Notification objects
158
+ # See http://www.telapi.com/docs/api/rest/notifications/list/
159
+ #
160
+ # Required params:
161
+ # +id+:: call id
162
+ #
163
+ # Optional params is a hash containing:
164
+ # +Log+:: 0 (error), 1 (warning), or 2 (info)
165
+ # +Page+:: integer greater than 0
166
+ # +PageSize+:: integer greater than 0
167
+ def notifications(id, optional_params = {})
168
+ response = Network.get(['Calls', id, 'Notifications'], optional_params)
169
+ ResourceCollection.new(response, 'notifications', Notification)
170
+ end
171
+ end
172
+
173
+ # See ::interrupt
174
+ def interrupt(url, method = 'POST', status = 'completed')
175
+ self.class.interrupt(self.sid, url, method, status)
176
+ end
177
+
178
+ # See ::hangup
179
+ def hangup(status = 'completed')
180
+ self.class.hangup(self.sid, status)
181
+ end
182
+
183
+ # See ::send_digits
184
+ def send_digits(play_dtmf, play_dtmf_leg = 'aleg')
185
+ self.class.send_digits(self.sid, play_dtmf, play_dtmf_leg)
186
+ end
187
+
188
+ # See ::play_audio
189
+ def play_audio(sound_url, optional_params = {})
190
+ self.class.play_audio(self.sid, sound_url, optional_params)
191
+ end
192
+
193
+ # See ::voice_effect
194
+ def voice_effect(optional_params = {})
195
+ self.class.voice_effect(self.sid, optional_params)
196
+ end
197
+
198
+ # See ::record
199
+ def record(record = true, optional_params = {})
200
+ self.class.record(self.sid, record, optional_params)
201
+ end
202
+
203
+ # See ::recordings
204
+ def recordings(optional_params = {})
205
+ self.class.recordings(self.sid, optional_params)
206
+ end
207
+
208
+ # See ::notifications
209
+ def notifications(optional_params = {})
210
+ self.class.notifications(self.sid, optional_params)
211
+ end
212
+
213
+ end
214
+ end