plivo 0.3.12 → 0.3.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/plivo.rb +624 -615
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4e40aee214c51afcf19d3608b040700c981ab8a0
4
- data.tar.gz: a14295562d527dfc2cd9edea1f0dd1a1d217d4c2
3
+ metadata.gz: 7f296f15e2c7d219428b9a954dc5620995b1798d
4
+ data.tar.gz: 73d8d41c4e24c27a4ff04a902d994b81bbb4d82d
5
5
  SHA512:
6
- metadata.gz: 5eb1df48004961741c45bdf39aaad7affe2aa60385ea7eeb4c9559cd1a1f96d55da231986685dd48ec46a3c93502b9047012eb9d3e92ba4a3e32ef16f1373a5f
7
- data.tar.gz: fd51dc6d46b96bd5727f19a1346401bb2eb1b7e8bdba55c031ea88cc00d9c241fdec3517fb2b6e98dd9e26ead75b2b408e26c3c76d328f4e9d0b4c6dc8df052e
6
+ metadata.gz: 965b2e048d740e13d67c620a5a23ef37ccdfb80925b78d2a48ab77b5763fcd1e57a5793a1f42faa73732f2ea794033fb29d99f32fc60d957cc9527f76deb38e1
7
+ data.tar.gz: 478dccd4ae808f814ea5a30fa5b70e4f466bbff948058acf53091b1ee04a2c555f079963ea01b580fc0018ec3ea9243d685d31e5b102c6ceb3b15d1489e01573
@@ -7,780 +7,789 @@ require 'openssl'
7
7
  require 'base64'
8
8
 
9
9
  module Plivo
10
- class PlivoError < StandardError
11
- end
10
+ class PlivoError < StandardError
11
+ end
12
12
 
13
- class XPlivoSignature
14
- attr_accessor :signature, :uri, :post_params, :auth_token
13
+ class XPlivoSignature
14
+ attr_accessor :signature, :uri, :post_params, :auth_token
15
15
 
16
- def initialize(signature, uri, post_params, auth_token)
17
- @signature = signature
18
- @uri = uri
19
- @post_params = post_params
20
- @auth_token = auth_token
21
- end
16
+ def initialize(signature, uri, post_params, auth_token)
17
+ @signature = signature
18
+ @uri = uri
19
+ @post_params = post_params
20
+ @auth_token = auth_token
21
+ end
22
+
23
+ def is_valid?
24
+ uri = @post_params.sort.reduce(@uri) {|_, (key, val)| _ += key + val}
25
+ return Base64.encode64(OpenSSL::HMAC.digest('sha1', @auth_token, uri)).chomp.eql? @signature
26
+ end
22
27
 
23
- def is_valid?
24
- uri = @post_params.sort.reduce(@uri) {|_, (key, val)| _ += key + val}
25
- return Base64.encode64(OpenSSL::HMAC.digest('sha1', @auth_token, uri)).chomp.eql? @signature
26
28
  end
27
29
 
28
- end
30
+ class RestAPI
31
+ attr_accessor :auth_id, :auth_token, :url, :version, :api, :headers, :rest
29
32
 
30
- class RestAPI
31
- attr_accessor :auth_id, :auth_token, :url, :version, :api, :headers, :rest
33
+ def initialize(auth_id, auth_token, url="https://api.plivo.com", version="v1")
34
+ @auth_id = auth_id
35
+ @auth_token = auth_token
36
+ @url = url.chomp('/')
37
+ @version = version
38
+ @api = @url + '/' + @version + '/Account/' + @auth_id
39
+ @headers = {"User-Agent" => "RubyPlivo"}
40
+ @rest = RestClient::Resource.new(@api, @auth_id, @auth_token)
41
+ end
32
42
 
33
- def initialize(auth_id, auth_token, url="https://api.plivo.com", version="v1")
34
- @auth_id = auth_id
35
- @auth_token = auth_token
36
- @url = url.chomp('/')
37
- @version = version
38
- @api = @url + '/' + @version + '/Account/' + @auth_id
39
- @headers = {"User-Agent" => "RubyPlivo"}
40
- @rest = RestClient::Resource.new(@api, @auth_id, @auth_token)
41
- end
43
+ def hash_to_params(myhash)
44
+ return myhash.map { |k, v| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}" }.join("&")
45
+ end
42
46
 
43
- def hash_to_params(myhash)
44
- return myhash.map { |k, v| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}" }.join("&")
45
- end
47
+ def request(method, path, params=nil)
48
+ if method == "POST"
49
+ if not params
50
+ params = {}
51
+ end
52
+ begin
53
+ r = @rest[path].post params.to_json, :content_type => 'application/json'
54
+ rescue => e
55
+ response = e
56
+ end
57
+ if not response
58
+ code = r.code
59
+ raw = r.to_str
60
+ response = JSON.parse(raw)
61
+ end
62
+ return [code, response]
63
+ elsif method == "GET"
64
+ if params
65
+ path = path + '?' + hash_to_params(params)
66
+ end
67
+
68
+ begin
69
+ r = @rest[path].get
70
+ rescue => e
71
+ response = e
72
+ end
73
+ if not response
74
+ code = r.code
75
+ raw = r.to_str
76
+ response = JSON.parse(raw)
77
+ end
78
+ return [code, response]
79
+ elsif method == "DELETE"
80
+ if params
81
+ path = path + '?' + hash_to_params(params)
82
+ end
83
+ begin
84
+ r = @rest[path].delete
85
+ rescue => e
86
+ response = e
87
+ end
88
+ if not response
89
+ code = r.code
90
+ end
91
+ return [code, ""]
92
+ end
93
+ return [405, 'Method Not Supported']
94
+ end
46
95
 
47
- def request(method, path, params=nil)
48
- if method == "POST"
49
- if not params
50
- params = {}
51
- end
52
- begin
53
- r = @rest[path].post params.to_json, :content_type => 'application/json'
54
- rescue => e
55
- response = e
56
- end
57
- if not response
58
- code = r.code
59
- raw = r.to_str
60
- response = JSON.parse(raw)
61
- end
62
- return [code, response]
63
- elsif method == "GET"
64
- if params
65
- path = path + '?' + hash_to_params(params)
66
- end
67
-
68
- begin
69
- r = @rest[path].get
70
- rescue => e
71
- response = e
72
- end
73
- if not response
74
- code = r.code
75
- raw = r.to_str
76
- response = JSON.parse(raw)
77
- end
78
- return [code, response]
79
- elsif method == "DELETE"
80
- if params
81
- path = path + '?' + hash_to_params(params)
82
- end
83
- begin
84
- r = @rest[path].delete
85
- rescue => e
86
- response = e
87
- end
88
- if not response
89
- code = r.code
90
- end
91
- return [code, ""]
92
- end
93
- return [405, 'Method Not Supported']
94
- end
96
+ ## Accounts ##
97
+ def get_account(params={})
98
+ return request('GET', "/", params)
99
+ end
95
100
 
96
- ## Accounts ##
97
- def get_account(params={})
98
- return request('GET', "/", params)
99
- end
101
+ def modify_account(params={})
102
+ return request('POST', "/", params)
103
+ end
100
104
 
101
- def modify_account(params={})
102
- return request('POST', "/", params)
103
- end
105
+ def get_subaccounts(params={})
106
+ return request('GET', "/Subaccount/", params)
107
+ end
104
108
 
105
- def get_subaccounts(params={})
106
- return request('GET', "/Subaccount/", params)
107
- end
109
+ def create_subaccount(params={})
110
+ return request('POST', "/Subaccount/", params)
111
+ end
108
112
 
109
- def create_subaccount(params={})
110
- return request('POST', "/Subaccount/", params)
111
- end
113
+ def get_subaccount(params={})
114
+ subauth_id = params.delete("subauth_id") || params.delete(:subauth_id)
115
+ return request('GET', "/Subaccount/#{subauth_id}/", params)
116
+ end
112
117
 
113
- def get_subaccount(params={})
114
- subauth_id = params.delete("subauth_id") || params.delete(:subauth_id)
115
- return request('GET', "/Subaccount/#{subauth_id}/", params)
116
- end
118
+ def modify_subaccount(params={})
119
+ subauth_id = params.delete("subauth_id") || params.delete(:subauth_id)
120
+ return request('POST', "/Subaccount/#{subauth_id}/", params)
121
+ end
117
122
 
118
- def modify_subaccount(params={})
119
- subauth_id = params.delete("subauth_id") || params.delete(:subauth_id)
120
- return request('POST', "/Subaccount/#{subauth_id}/", params)
121
- end
123
+ def delete_subaccount(params={})
124
+ subauth_id = params.delete("subauth_id") || params.delete(:subauth_id)
125
+ return request('DELETE', "/Subaccount/#{subauth_id}/", params)
126
+ end
122
127
 
123
- def delete_subaccount(params={})
124
- subauth_id = params.delete("subauth_id") || params.delete(:subauth_id)
125
- return request('DELETE', "/Subaccount/#{subauth_id}/", params)
126
- end
128
+ ## Applications ##
129
+ def get_applications(params={})
130
+ return request('GET', "/Application/", params)
131
+ end
127
132
 
128
- ## Applications ##
129
- def get_applications(params={})
130
- return request('GET', "/Application/", params)
131
- end
133
+ def create_application(params={})
134
+ return request('POST', "/Application/", params)
135
+ end
132
136
 
133
- def create_application(params={})
134
- return request('POST', "/Application/", params)
135
- end
137
+ def get_application(params={})
138
+ app_id = params.delete("app_id")
139
+ return request('GET', "/Application/#{app_id}/", params)
140
+ end
136
141
 
137
- def get_application(params={})
138
- app_id = params.delete("app_id")
139
- return request('GET', "/Application/#{app_id}/", params)
140
- end
142
+ def modify_application(params={})
143
+ app_id = params.delete("app_id")
144
+ return request('POST', "/Application/#{app_id}/", params)
145
+ end
141
146
 
142
- def modify_application(params={})
143
- app_id = params.delete("app_id")
144
- return request('POST', "/Application/#{app_id}/", params)
145
- end
147
+ def delete_application(params={})
148
+ app_id = params.delete("app_id")
149
+ return request('DELETE', "/Application/#{app_id}/", params)
150
+ end
146
151
 
147
- def delete_application(params={})
148
- app_id = params.delete("app_id")
149
- return request('DELETE', "/Application/#{app_id}/", params)
150
- end
152
+ ## Numbers ##
153
+ def search_phone_number(params={})
154
+ return request('GET', "/PhoneNumber/", params)
155
+ end
151
156
 
152
- ## Numbers ##
153
- def get_numbers(params={})
154
- return request('GET', "/Number/", params)
155
- end
157
+ def buy_phone_number(params={})
158
+ number = params.delete("number")
159
+ return request('POST', "/PhoneNumber/#{number}/", params)
160
+ end
156
161
 
157
- def search_numbers(params={})
158
- return request('GET', "/AvailableNumber/", params)
159
- end
162
+ def get_numbers(params={})
163
+ return request('GET', "/Number/", params)
164
+ end
160
165
 
161
- def get_number(params={})
162
- number = params.delete("number")
163
- return request('GET', "/Number/#{number}/", params)
164
- end
166
+ def search_numbers(params={})
167
+ return request('GET', "/AvailableNumber/", params)
168
+ end
165
169
 
166
- def rent_number(params={})
167
- number = params.delete("number")
168
- return request('POST', "/AvailableNumber/#{number}/", params)
169
- end
170
+ def get_number(params={})
171
+ number = params.delete("number")
172
+ return request('GET', "/Number/#{number}/", params)
173
+ end
170
174
 
171
- def unrent_number(params={})
172
- number = params.delete("number")
173
- return request('DELETE', "/Number/#{number}/", params)
174
- end
175
+ def rent_number(params={})
176
+ number = params.delete("number")
177
+ return request('POST', "/AvailableNumber/#{number}/", params)
178
+ end
175
179
 
176
- def link_application_number(params={})
177
- number = params.delete("number")
178
- return request('POST', "/Number/#{number}/", params)
179
- end
180
+ def unrent_number(params={})
181
+ number = params.delete("number")
182
+ return request('DELETE', "/Number/#{number}/", params)
183
+ end
180
184
 
181
- def unlink_application_number(params={})
182
- number = params.delete("number")
183
- params = {"app_id" => ""}
184
- return request('POST', "/Number/#{number}/", params)
185
- end
185
+ def link_application_number(params={})
186
+ number = params.delete("number")
187
+ return request('POST', "/Number/#{number}/", params)
188
+ end
186
189
 
187
- def get_number_group(params={})
188
- return request('GET', "/AvailableNumberGroup/", params)
189
- end
190
+ def unlink_application_number(params={})
191
+ number = params.delete("number")
192
+ params = {"app_id" => ""}
193
+ return request('POST', "/Number/#{number}/", params)
194
+ end
190
195
 
191
- def get_number_group_details(params={})
192
- group_id = params.delete('group_id')
193
- return request('GET', "/AvailableNumberGroup/#{group_id}/", params)
194
- end
196
+ def get_number_group(params={})
197
+ return request('GET', "/AvailableNumberGroup/", params)
198
+ end
195
199
 
196
- def rent_from_number_group(params={})
197
- group_id = params.delete('group_id')
198
- return request('POST', "/AvailableNumberGroup/#{group_id}/", params)
199
- end
200
+ def get_number_group_details(params={})
201
+ group_id = params.delete('group_id')
202
+ return request('GET', "/AvailableNumberGroup/#{group_id}/", params)
203
+ end
200
204
 
201
- ## Calls ##
202
- def get_cdrs(params={})
203
- return request('GET', "/Call/", params)
204
- end
205
+ def rent_from_number_group(params={})
206
+ group_id = params.delete('group_id')
207
+ return request('POST', "/AvailableNumberGroup/#{group_id}/", params)
208
+ end
205
209
 
206
- def get_cdr(params={})
207
- record_id = params.delete('record_id')
208
- return request('GET', "/Call/#{record_id}/", params)
209
- end
210
+ ## Calls ##
211
+ def get_cdrs(params={})
212
+ return request('GET', "/Call/", params)
213
+ end
210
214
 
211
- def get_live_calls(params={})
212
- params["status"] = "live"
213
- return request('GET', "/Call/", params)
214
- end
215
+ def get_cdr(params={})
216
+ record_id = params.delete('record_id')
217
+ return request('GET', "/Call/#{record_id}/", params)
218
+ end
215
219
 
216
- def get_live_call(params={})
217
- call_uuid = params.delete('call_uuid')
218
- params["status"] = "live"
219
- return request('GET', "/Call/#{call_uuid}/", params)
220
- end
220
+ def get_live_calls(params={})
221
+ params["status"] = "live"
222
+ return request('GET', "/Call/", params)
223
+ end
221
224
 
222
- def make_call(params={})
223
- return request('POST', "/Call/", params)
224
- end
225
+ def get_live_call(params={})
226
+ call_uuid = params.delete('call_uuid')
227
+ params["status"] = "live"
228
+ return request('GET', "/Call/#{call_uuid}/", params)
229
+ end
225
230
 
226
- def hangup_all_calls(params={})
227
- return request('DELETE', "/Call/", params)
228
- end
231
+ def make_call(params={})
232
+ return request('POST', "/Call/", params)
233
+ end
229
234
 
230
- def transfer_call(params={})
231
- call_uuid = params.delete('call_uuid')
232
- return request('POST', "/Call/#{call_uuid}/", params)
233
- end
235
+ def hangup_all_calls(params={})
236
+ return request('DELETE', "/Call/", params)
237
+ end
234
238
 
235
- def hangup_call(params={})
236
- call_uuid = params.delete('call_uuid')
237
- return request('DELETE', "/Call/#{call_uuid}/", params)
238
- end
239
+ def transfer_call(params={})
240
+ call_uuid = params.delete('call_uuid')
241
+ return request('POST', "/Call/#{call_uuid}/", params)
242
+ end
239
243
 
240
- def record(params={})
241
- call_uuid = params.delete('call_uuid')
242
- return request('POST', "/Call/#{call_uuid}/Record/", params)
243
- end
244
+ def hangup_call(params={})
245
+ call_uuid = params.delete('call_uuid')
246
+ return request('DELETE', "/Call/#{call_uuid}/", params)
247
+ end
244
248
 
245
- def stop_record(params={})
246
- call_uuid = params.delete('call_uuid')
247
- return request('DELETE', "/Call/#{call_uuid}/Record/", params)
248
- end
249
+ def record(params={})
250
+ call_uuid = params.delete('call_uuid')
251
+ return request('POST', "/Call/#{call_uuid}/Record/", params)
252
+ end
249
253
 
250
- def play(params={})
251
- call_uuid = params.delete('call_uuid')
252
- return request('POST', "/Call/#{call_uuid}/Play/", params)
253
- end
254
+ def stop_record(params={})
255
+ call_uuid = params.delete('call_uuid')
256
+ return request('DELETE', "/Call/#{call_uuid}/Record/", params)
257
+ end
254
258
 
255
- def stop_play(params={})
256
- call_uuid = params.delete('call_uuid')
257
- return request('DELETE', "/Call/#{call_uuid}/Play/", params)
258
- end
259
+ def play(params={})
260
+ call_uuid = params.delete('call_uuid')
261
+ return request('POST', "/Call/#{call_uuid}/Play/", params)
262
+ end
259
263
 
260
- def speak(params={})
261
- call_uuid = params.delete('call_uuid')
262
- params.update({"text" => HTMLEntities.new(:html4).encode(params['text'], :decimal)})
263
- return request('POST', "/Call/#{call_uuid}/Speak/", params)
264
- end
264
+ def stop_play(params={})
265
+ call_uuid = params.delete('call_uuid')
266
+ return request('DELETE', "/Call/#{call_uuid}/Play/", params)
267
+ end
265
268
 
266
- def stop_speak(params={})
267
- call_uuid = params.delete('call_uuid')
268
- return request('DELETE', "/Call/#{call_uuid}/Speak/", params)
269
- end
269
+ def speak(params={})
270
+ call_uuid = params.delete('call_uuid')
271
+ params.update({"text" => HTMLEntities.new(:html4).encode(params['text'], :decimal)})
272
+ return request('POST', "/Call/#{call_uuid}/Speak/", params)
273
+ end
270
274
 
271
- def send_digits(params={})
272
- call_uuid = params.delete('call_uuid')
273
- return request('POST', "/Call/#{call_uuid}/DTMF/", params)
274
- end
275
+ def stop_speak(params={})
276
+ call_uuid = params.delete('call_uuid')
277
+ return request('DELETE', "/Call/#{call_uuid}/Speak/", params)
278
+ end
275
279
 
276
- ## Calls requests ##
277
- def hangup_request(params={})
278
- request_uuid = params.delete('request_uuid')
279
- return request('DELETE', "/Request/#{request_uuid}/", params)
280
- end
280
+ def send_digits(params={})
281
+ call_uuid = params.delete('call_uuid')
282
+ return request('POST', "/Call/#{call_uuid}/DTMF/", params)
283
+ end
281
284
 
282
- ## Conferences ##
283
- def get_live_conferences(params={})
284
- return request('GET', "/Conference/", params)
285
- end
285
+ ## Calls requests ##
286
+ def hangup_request(params={})
287
+ request_uuid = params.delete('request_uuid')
288
+ return request('DELETE', "/Request/#{request_uuid}/", params)
289
+ end
286
290
 
287
- def hangup_all_conferences(params={})
288
- return request('DELETE', "/Conference/", params)
289
- end
291
+ ## Conferences ##
292
+ def get_live_conferences(params={})
293
+ return request('GET', "/Conference/", params)
294
+ end
290
295
 
291
- def get_live_conference(params={})
292
- conference_name = params.delete('conference_name')
293
- return request('GET', "/Conference/#{conference_name}/", params)
294
- end
296
+ def hangup_all_conferences(params={})
297
+ return request('DELETE', "/Conference/", params)
298
+ end
295
299
 
296
- def hangup_conference(params={})
297
- conference_name = params.delete('conference_name')
298
- return request('DELETE', "/Conference/#{conference_name}/", params)
299
- end
300
+ def get_live_conference(params={})
301
+ conference_name = params.delete('conference_name')
302
+ return request('GET', "/Conference/#{conference_name}/", params)
303
+ end
300
304
 
301
- def hangup_member(params={})
302
- conference_name = params.delete('conference_name')
303
- member_id = params.delete('member_id')
304
- return request('DELETE', "/Conference/#{conference_name}/Member/#{member_id}/", params)
305
- end
305
+ def hangup_conference(params={})
306
+ conference_name = params.delete('conference_name')
307
+ return request('DELETE', "/Conference/#{conference_name}/", params)
308
+ end
306
309
 
307
- def play_member(params={})
308
- conference_name = params.delete('conference_name')
309
- member_id = params.delete('member_id')
310
- return request('POST', "/Conference/#{conference_name}/Member/#{member_id}/Play/", params)
311
- end
310
+ def hangup_member(params={})
311
+ conference_name = params.delete('conference_name')
312
+ member_id = params.delete('member_id')
313
+ return request('DELETE', "/Conference/#{conference_name}/Member/#{member_id}/", params)
314
+ end
312
315
 
313
- def stop_play_member(params={})
314
- conference_name = params.delete('conference_name')
315
- member_id = params.delete('member_id')
316
- return request('DELETE', "/Conference/#{conference_name}/Member/#{member_id}/Play/", params)
317
- end
316
+ def play_member(params={})
317
+ conference_name = params.delete('conference_name')
318
+ member_id = params.delete('member_id')
319
+ return request('POST', "/Conference/#{conference_name}/Member/#{member_id}/Play/", params)
320
+ end
318
321
 
319
- def speak_member(params={})
320
- conference_name = params.delete('conference_name')
321
- member_id = params.delete('member_id')
322
- params.update({"text" => HTMLEntities.new(:html4).encode(params['text'], :decimal)})
323
- return request('POST', "/Conference/#{conference_name}/Member/#{member_id}/Speak/", params)
324
- end
322
+ def stop_play_member(params={})
323
+ conference_name = params.delete('conference_name')
324
+ member_id = params.delete('member_id')
325
+ return request('DELETE', "/Conference/#{conference_name}/Member/#{member_id}/Play/", params)
326
+ end
325
327
 
326
- def deaf_member(params={})
327
- conference_name = params.delete('conference_name')
328
- member_id = params.delete('member_id')
329
- return request('POST', "/Conference/#{conference_name}/Member/#{member_id}/Deaf/", params)
330
- end
328
+ def speak_member(params={})
329
+ conference_name = params.delete('conference_name')
330
+ member_id = params.delete('member_id')
331
+ params.update({"text" => HTMLEntities.new(:html4).encode(params['text'], :decimal)})
332
+ return request('POST', "/Conference/#{conference_name}/Member/#{member_id}/Speak/", params)
333
+ end
331
334
 
332
- def undeaf_member(params={})
333
- conference_name = params.delete('conference_name')
334
- member_id = params.delete('member_id')
335
- return request('DELETE', "/Conference/#{conference_name}/Member/#{member_id}/Deaf/", params)
336
- end
335
+ def deaf_member(params={})
336
+ conference_name = params.delete('conference_name')
337
+ member_id = params.delete('member_id')
338
+ return request('POST', "/Conference/#{conference_name}/Member/#{member_id}/Deaf/", params)
339
+ end
337
340
 
338
- def mute_member(params={})
339
- conference_name = params.delete('conference_name')
340
- member_id = params.delete('member_id')
341
- return request('POST', "/Conference/#{conference_name}/Member/#{member_id}/Mute/", params)
342
- end
341
+ def undeaf_member(params={})
342
+ conference_name = params.delete('conference_name')
343
+ member_id = params.delete('member_id')
344
+ return request('DELETE', "/Conference/#{conference_name}/Member/#{member_id}/Deaf/", params)
345
+ end
343
346
 
344
- def unmute_member(params={})
345
- conference_name = params.delete('conference_name')
346
- member_id = params.delete('member_id')
347
- return request('DELETE', "/Conference/#{conference_name}/Member/#{member_id}/Mute/", params)
348
- end
347
+ def mute_member(params={})
348
+ conference_name = params.delete('conference_name')
349
+ member_id = params.delete('member_id')
350
+ return request('POST', "/Conference/#{conference_name}/Member/#{member_id}/Mute/", params)
351
+ end
349
352
 
350
- def kick_member(params={})
351
- conference_name = params.delete('conference_name')
352
- member_id = params.delete('member_id')
353
- return request('POST', "/Conference/#{conference_name}/Member/#{member_id}/Kick/", params)
354
- end
353
+ def unmute_member(params={})
354
+ conference_name = params.delete('conference_name')
355
+ member_id = params.delete('member_id')
356
+ return request('DELETE', "/Conference/#{conference_name}/Member/#{member_id}/Mute/", params)
357
+ end
355
358
 
356
- def record_conference(params={})
357
- conference_name = params.delete('conference_name')
358
- return request('POST', "/Conference/#{conference_name}/Record/", params)
359
- end
359
+ def kick_member(params={})
360
+ conference_name = params.delete('conference_name')
361
+ member_id = params.delete('member_id')
362
+ return request('POST', "/Conference/#{conference_name}/Member/#{member_id}/Kick/", params)
363
+ end
360
364
 
361
- def stop_record_conference(params={})
362
- conference_name = params.delete('conference_name')
363
- return request('DELETE', "/Conference/#{conference_name}/Record/", params)
364
- end
365
+ def record_conference(params={})
366
+ conference_name = params.delete('conference_name')
367
+ return request('POST', "/Conference/#{conference_name}/Record/", params)
368
+ end
365
369
 
366
- ## Recordings ##
367
- def get_recordings(params={})
368
- return request('GET', "/Recording/", params)
369
- end
370
+ def stop_record_conference(params={})
371
+ conference_name = params.delete('conference_name')
372
+ return request('DELETE', "/Conference/#{conference_name}/Record/", params)
373
+ end
370
374
 
371
- def get_recording(params={})
372
- recording_id = params.delete('recording_id')
373
- return request('GET', "/Recording/#{recording_id}/", params)
374
- end
375
+ ## Recordings ##
376
+ def get_recordings(params={})
377
+ return request('GET', "/Recording/", params)
378
+ end
375
379
 
376
- def delete_recording(params={})
377
- recording_id = params.delete('recording_id')
378
- return request('DELETE', "/Recording/#{recording_id}/", params)
379
- end
380
+ def get_recording(params={})
381
+ recording_id = params.delete('recording_id')
382
+ return request('GET', "/Recording/#{recording_id}/", params)
383
+ end
380
384
 
381
- ## Endpoints ##
382
- def get_endpoints(params={})
383
- return request('GET', "/Endpoint/", params)
384
- end
385
+ def delete_recording(params={})
386
+ recording_id = params.delete('recording_id')
387
+ return request('DELETE', "/Recording/#{recording_id}/", params)
388
+ end
385
389
 
386
- def create_endpoint(params={})
387
- return request('POST', "/Endpoint/", params)
388
- end
390
+ ## Endpoints ##
391
+ def get_endpoints(params={})
392
+ return request('GET', "/Endpoint/", params)
393
+ end
389
394
 
390
- def get_endpoint(params={})
391
- endpoint_id = params.delete('endpoint_id')
392
- return request('GET', "/Endpoint/#{endpoint_id}/", params)
393
- end
395
+ def create_endpoint(params={})
396
+ return request('POST', "/Endpoint/", params)
397
+ end
394
398
 
395
- def modify_endpoint(params={})
396
- endpoint_id = params.delete('endpoint_id')
397
- return request('POST', "/Endpoint/#{endpoint_id}/", params)
398
- end
399
+ def get_endpoint(params={})
400
+ endpoint_id = params.delete('endpoint_id')
401
+ return request('GET', "/Endpoint/#{endpoint_id}/", params)
402
+ end
399
403
 
400
- def delete_endpoint(params={})
401
- endpoint_id = params.delete('endpoint_id')
402
- return request('DELETE', "/Endpoint/#{endpoint_id}/", params)
403
- end
404
+ def modify_endpoint(params={})
405
+ endpoint_id = params.delete('endpoint_id')
406
+ return request('POST', "/Endpoint/#{endpoint_id}/", params)
407
+ end
404
408
 
405
- ## Incoming Carriers ##
406
- def get_incoming_carriers(params={})
407
- return request('GET', "/IncomingCarrier/", params)
408
- end
409
+ def delete_endpoint(params={})
410
+ endpoint_id = params.delete('endpoint_id')
411
+ return request('DELETE', "/Endpoint/#{endpoint_id}/", params)
412
+ end
409
413
 
410
- def create_incoming_carrier(params={})
411
- return request('POST', "/IncomingCarrier/", params)
412
- end
414
+ ## Incoming Carriers ##
415
+ def get_incoming_carriers(params={})
416
+ return request('GET', "/IncomingCarrier/", params)
417
+ end
413
418
 
414
- def get_incoming_carrier(params={})
415
- carrier_id = params.delete('carrier_id')
416
- return request('GET', "/IncomingCarrier/#{carrier_id}/", params)
417
- end
419
+ def create_incoming_carrier(params={})
420
+ return request('POST', "/IncomingCarrier/", params)
421
+ end
418
422
 
419
- def modify_incoming_carrier(params={})
420
- carrier_id = params.delete('carrier_id')
421
- return request('POST', "/IncomingCarrier/#{carrier_id}/", params)
422
- end
423
+ def get_incoming_carrier(params={})
424
+ carrier_id = params.delete('carrier_id')
425
+ return request('GET', "/IncomingCarrier/#{carrier_id}/", params)
426
+ end
423
427
 
424
- def delete_incoming_carrier(params={})
425
- carrier_id = params.delete('carrier_id')
426
- return request('DELETE', "/IncomingCarrier/#{carrier_id}/", params)
427
- end
428
+ def modify_incoming_carrier(params={})
429
+ carrier_id = params.delete('carrier_id')
430
+ return request('POST', "/IncomingCarrier/#{carrier_id}/", params)
431
+ end
428
432
 
429
- ## Outgoing Carriers ##
430
- def get_outgoing_carriers(params={})
431
- return request('GET', "/OutgoingCarrier/", params)
432
- end
433
+ def delete_incoming_carrier(params={})
434
+ carrier_id = params.delete('carrier_id')
435
+ return request('DELETE', "/IncomingCarrier/#{carrier_id}/", params)
436
+ end
433
437
 
434
- def create_outgoing_carrier(params={})
435
- return request('POST', "/OutgoingCarrier/", params)
436
- end
438
+ ## Outgoing Carriers ##
439
+ def get_outgoing_carriers(params={})
440
+ return request('GET', "/OutgoingCarrier/", params)
441
+ end
437
442
 
438
- def get_outgoing_carrier(params={})
439
- carrier_id = params.delete('carrier_id')
440
- return request('GET', "/OutgoingCarrier/#{carrier_id}/", params)
441
- end
443
+ def create_outgoing_carrier(params={})
444
+ return request('POST', "/OutgoingCarrier/", params)
445
+ end
442
446
 
443
- def modify_outgoing_carrier(params={})
444
- carrier_id = params.delete('carrier_id')
445
- return request('POST', "/OutgoingCarrier/#{carrier_id}/", params)
446
- end
447
+ def get_outgoing_carrier(params={})
448
+ carrier_id = params.delete('carrier_id')
449
+ return request('GET', "/OutgoingCarrier/#{carrier_id}/", params)
450
+ end
447
451
 
448
- def delete_outgoing_carrier(params={})
449
- carrier_id = params.delete('carrier_id')
450
- return request('DELETE', "/OutgoingCarrier/#{carrier_id}/", params)
451
- end
452
+ def modify_outgoing_carrier(params={})
453
+ carrier_id = params.delete('carrier_id')
454
+ return request('POST', "/OutgoingCarrier/#{carrier_id}/", params)
455
+ end
452
456
 
453
- ## Outgoing Carrier Routings ##
454
- def get_outgoing_carrier_routings(params={})
455
- return request('GET', "/OutgoingCarrierRouting/", params)
456
- end
457
+ def delete_outgoing_carrier(params={})
458
+ carrier_id = params.delete('carrier_id')
459
+ return request('DELETE', "/OutgoingCarrier/#{carrier_id}/", params)
460
+ end
457
461
 
458
- def create_outgoing_carrier_routing(params={})
459
- return request('POST', "/OutgoingCarrierRouting/", params)
460
- end
462
+ ## Outgoing Carrier Routings ##
463
+ def get_outgoing_carrier_routings(params={})
464
+ return request('GET', "/OutgoingCarrierRouting/", params)
465
+ end
461
466
 
462
- def get_outgoing_carrier_routing(params={})
463
- routing_id = params.delete('routing_id')
464
- return request('GET', "/OutgoingCarrierRouting/#{routing_id}/", params)
465
- end
467
+ def create_outgoing_carrier_routing(params={})
468
+ return request('POST', "/OutgoingCarrierRouting/", params)
469
+ end
466
470
 
467
- def modify_outgoing_carrier_routing(params={})
468
- routing_id = params.delete('routing_id')
469
- return request('POST', "/OutgoingCarrierRouting/#{routing_id}/", params)
470
- end
471
+ def get_outgoing_carrier_routing(params={})
472
+ routing_id = params.delete('routing_id')
473
+ return request('GET', "/OutgoingCarrierRouting/#{routing_id}/", params)
474
+ end
471
475
 
472
- def delete_outgoing_carrier_routing(params={})
473
- routing_id = params.delete('routing_id')
474
- return request('DELETE', "/OutgoingCarrierRouting/#{routing_id}/", params)
475
- end
476
+ def modify_outgoing_carrier_routing(params={})
477
+ routing_id = params.delete('routing_id')
478
+ return request('POST', "/OutgoingCarrierRouting/#{routing_id}/", params)
479
+ end
476
480
 
477
- ## Pricing ##
478
- def pricing(params={})
479
- return request('GET', "/Pricing/", params)
480
- end
481
+ def delete_outgoing_carrier_routing(params={})
482
+ routing_id = params.delete('routing_id')
483
+ return request('DELETE', "/OutgoingCarrierRouting/#{routing_id}/", params)
484
+ end
481
485
 
482
- ## Outgoing Carrier ##
486
+ ## Pricing ##
487
+ def pricing(params={})
488
+ return request('GET', "/Pricing/", params)
489
+ end
483
490
 
484
- ## To be added here ##
491
+ ## Outgoing Carrier ##
485
492
 
486
- ## Message ##
487
- def send_message(params={})
488
- return request('POST', "/Message/", params)
489
- end
493
+ ## To be added here ##
490
494
 
491
- def get_messages(params={})
492
- return request('GET', "/Message/", params)
493
- end
495
+ ## Message ##
496
+ def send_message(params={})
497
+ return request('POST', "/Message/", params)
498
+ end
499
+
500
+ def get_messages(params={})
501
+ return request('GET', "/Message/", params)
502
+ end
494
503
 
495
- def get_message(params={})
496
- record_id = params.delete('record_id')
497
- return request('GET', "/Message/#{record_id}/", params)
504
+ def get_message(params={})
505
+ record_id = params.delete('record_id')
506
+ return request('GET', "/Message/#{record_id}/", params)
507
+ end
498
508
  end
499
- end
500
509
 
501
510
 
502
511
 
503
- class Element
504
- class << self
505
- attr_accessor :valid_attributes, :nestables
506
- end
507
- @nestables = []
508
- @valid_attributes = []
509
-
510
- attr_accessor :node, :name
511
-
512
- def initialize(body=nil, attributes={}, &block)
513
- @name = self.class.name.split('::')[1]
514
- @body = body
515
- @node = REXML::Element.new @name
516
- attributes.each do |k, v|
517
- if self.class.valid_attributes.include?(k.to_s)
518
- @node.attributes[k.to_s] = convert_value(v)
519
- else
520
- raise PlivoError, "invalid attribute #{k.to_s} for #{@name}"
521
- end
522
- end
523
-
524
- if @body
525
- @node.text = @body
526
- end
527
-
528
- # Allow for nested "nestable" elements using a code block
529
- # ie
530
- # Plivo::Response.new do |r|
531
- # r.Dial do |n|
532
- # n.Number '+15557779999'
533
- # end
534
- # end
535
- yield(self) if block_given?
536
- end
512
+ class Element
513
+ class << self
514
+ attr_accessor :valid_attributes, :nestables
515
+ end
516
+ @nestables = []
517
+ @valid_attributes = []
518
+
519
+ attr_accessor :node, :name
520
+
521
+ def initialize(body=nil, attributes={}, &block)
522
+ @name = self.class.name.split('::')[1]
523
+ @body = body
524
+ @node = REXML::Element.new @name
525
+ attributes.each do |k, v|
526
+ if self.class.valid_attributes.include?(k.to_s)
527
+ @node.attributes[k.to_s] = convert_value(v)
528
+ else
529
+ raise PlivoError, "invalid attribute #{k.to_s} for #{@name}"
530
+ end
531
+ end
532
+
533
+ if @body
534
+ @node.text = @body
535
+ end
536
+
537
+ # Allow for nested "nestable" elements using a code block
538
+ # ie
539
+ # Plivo::Response.new do |r|
540
+ # r.Dial do |n|
541
+ # n.Number '+15557779999'
542
+ # end
543
+ # end
544
+ yield(self) if block_given?
545
+ end
537
546
 
538
- def method_missing(method, *args, &block)
539
- # Handle the addElement methods
540
- method = $1.to_sym if method.to_s =~ /^add(.*)/
541
- # Add the element
542
- add(Plivo.const_get(method).new(*args, &block))
543
- end
547
+ def method_missing(method, *args, &block)
548
+ # Handle the addElement methods
549
+ method = $1.to_sym if method.to_s =~ /^add(.*)/
550
+ # Add the element
551
+ add(Plivo.const_get(method).new(*args, &block))
552
+ end
544
553
 
545
554
 
546
- def convert_value(v)
547
- if v == true
548
- return "true"
549
- elsif v == false
550
- return "false"
551
- elsif v == nil
552
- return "none"
553
- elsif v == "get"
554
- return "GET"
555
- elsif v == "post"
556
- return "POST"
557
- else
558
- return v
559
- end
560
- end
555
+ def convert_value(v)
556
+ if v == true
557
+ return "true"
558
+ elsif v == false
559
+ return "false"
560
+ elsif v == nil
561
+ return "none"
562
+ elsif v == "get"
563
+ return "GET"
564
+ elsif v == "post"
565
+ return "POST"
566
+ else
567
+ return v
568
+ end
569
+ end
561
570
 
562
- def add(element)
563
- if not element
564
- raise PlivoError, "invalid element"
565
- end
566
- if self.class.nestables.include?(element.name)
567
- @node.elements << element.node
568
- return element
569
- else
570
- raise PlivoError, "#{element.name} not nestable in #{@name}"
571
- end
572
- end
571
+ def add(element)
572
+ if not element
573
+ raise PlivoError, "invalid element"
574
+ end
575
+ if self.class.nestables.include?(element.name)
576
+ @node.elements << element.node
577
+ return element
578
+ else
579
+ raise PlivoError, "#{element.name} not nestable in #{@name}"
580
+ end
581
+ end
573
582
 
574
- def to_xml
575
- return @node.to_s
576
- end
583
+ def to_xml
584
+ return @node.to_s
585
+ end
577
586
 
578
- def to_s
579
- return @node.to_s
587
+ def to_s
588
+ return @node.to_s
589
+ end
580
590
  end
581
- end
582
591
 
583
592
 
584
- class Response < Element
585
- @nestables = ['Speak', 'Play', 'GetDigits', 'Record', 'Dial', 'Message',
586
- 'Redirect', 'Wait', 'Hangup', 'PreAnswer', 'Conference', 'DTMF']
587
- @valid_attributes = []
593
+ class Response < Element
594
+ @nestables = ['Speak', 'Play', 'GetDigits', 'Record', 'Dial', 'Message',
595
+ 'Redirect', 'Wait', 'Hangup', 'PreAnswer', 'Conference', 'DTMF']
596
+ @valid_attributes = []
588
597
 
589
- def initialize()
590
- super(nil, {})
591
- end
598
+ def initialize()
599
+ super(nil, {})
600
+ end
592
601
 
593
- def to_xml()
594
- return '<?xml version="1.0" encoding="utf-8" ?>' + super()
595
- end
602
+ def to_xml()
603
+ return '<?xml version="1.0" encoding="utf-8" ?>' + super()
604
+ end
596
605
 
597
- def to_s()
598
- return '<?xml version="1.0" encoding="utf-8" ?>' + super()
606
+ def to_s()
607
+ return '<?xml version="1.0" encoding="utf-8" ?>' + super()
608
+ end
599
609
  end
600
- end
601
610
 
602
611
 
603
- class Speak < Element
604
- @nestables = []
605
- @valid_attributes = ['voice', 'language', 'loop']
612
+ class Speak < Element
613
+ @nestables = []
614
+ @valid_attributes = ['voice', 'language', 'loop']
606
615
 
607
- def initialize(body, attributes={})
608
- if not body
609
- raise PlivoError, 'No text set for Speak'
610
- else
611
- body = HTMLEntities.new(:html4).encode(body, :decimal)
612
- end
613
- super(body, attributes)
616
+ def initialize(body, attributes={})
617
+ if not body
618
+ raise PlivoError, 'No text set for Speak'
619
+ else
620
+ body = HTMLEntities.new(:html4).encode(body, :decimal)
621
+ end
622
+ super(body, attributes)
623
+ end
614
624
  end
615
- end
616
625
 
617
626
 
618
- class Play < Element
619
- @nestables = []
620
- @valid_attributes = ['loop']
627
+ class Play < Element
628
+ @nestables = []
629
+ @valid_attributes = ['loop']
621
630
 
622
- def initialize(body, attributes={})
623
- if not body
624
- raise PlivoError 'No url set for Play'
625
- end
626
- super(body, attributes)
631
+ def initialize(body, attributes={})
632
+ if not body
633
+ raise PlivoError 'No url set for Play'
634
+ end
635
+ super(body, attributes)
636
+ end
627
637
  end
628
- end
629
638
 
630
639
 
631
- class Wait < Element
632
- @nestables = []
633
- @valid_attributes = ['length', 'silence', 'min_silence']
640
+ class Wait < Element
641
+ @nestables = []
642
+ @valid_attributes = ['length', 'silence', 'min_silence']
634
643
 
635
- def initialize(attributes={})
636
- super(nil, attributes)
644
+ def initialize(attributes={})
645
+ super(nil, attributes)
646
+ end
637
647
  end
638
- end
639
648
 
640
649
 
641
- class Redirect < Element
642
- @nestables = []
643
- @valid_attributes = ['method']
650
+ class Redirect < Element
651
+ @nestables = []
652
+ @valid_attributes = ['method']
644
653
 
645
- def initialize(body, attributes={})
646
- if not body
647
- raise PlivoError 'No url set for Redirect'
648
- end
649
- super(body, attributes)
654
+ def initialize(body, attributes={})
655
+ if not body
656
+ raise PlivoError 'No url set for Redirect'
657
+ end
658
+ super(body, attributes)
659
+ end
650
660
  end
651
- end
652
661
 
653
662
 
654
- class Hangup < Element
655
- @nestables = []
656
- @valid_attributes = ['schedule', 'reason']
663
+ class Hangup < Element
664
+ @nestables = []
665
+ @valid_attributes = ['schedule', 'reason']
657
666
 
658
- def initialize(attributes={})
659
- super(nil, attributes)
667
+ def initialize(attributes={})
668
+ super(nil, attributes)
669
+ end
660
670
  end
661
- end
662
671
 
663
672
 
664
- class GetDigits < Element
665
- @nestables = ['Speak', 'Play', 'Wait']
666
- @valid_attributes = ['action', 'method', 'timeout', 'digitTimeout',
667
- 'numDigits', 'retries', 'invalidDigitsSound',
668
- 'validDigits', 'playBeep', 'redirect', "finishOnKey",
669
- 'digitTimeout', 'log']
673
+ class GetDigits < Element
674
+ @nestables = ['Speak', 'Play', 'Wait']
675
+ @valid_attributes = ['action', 'method', 'timeout', 'digitTimeout',
676
+ 'numDigits', 'retries', 'invalidDigitsSound',
677
+ 'validDigits', 'playBeep', 'redirect', "finishOnKey",
678
+ 'digitTimeout', 'log']
670
679
 
671
- def initialize(attributes={}, &block)
672
- super(nil, attributes, &block)
680
+ def initialize(attributes={}, &block)
681
+ super(nil, attributes, &block)
682
+ end
673
683
  end
674
- end
675
684
 
676
685
 
677
- class Number < Element
678
- @nestables = []
679
- @valid_attributes = ['sendDigits', 'sendOnPreanswer']
686
+ class Number < Element
687
+ @nestables = []
688
+ @valid_attributes = ['sendDigits', 'sendOnPreanswer']
680
689
 
681
- def initialize(body, attributes={})
682
- if not body
683
- raise PlivoError, 'No number set for Number'
684
- end
685
- super(body, attributes)
690
+ def initialize(body, attributes={})
691
+ if not body
692
+ raise PlivoError, 'No number set for Number'
693
+ end
694
+ super(body, attributes)
695
+ end
686
696
  end
687
- end
688
697
 
689
698
 
690
- class User < Element
691
- @nestables = []
692
- @valid_attributes = ['sendDigits', 'sendOnPreanswer', 'sipHeaders']
699
+ class User < Element
700
+ @nestables = []
701
+ @valid_attributes = ['sendDigits', 'sendOnPreanswer', 'sipHeaders']
693
702
 
694
- def initialize(body, attributes={})
695
- if not body
696
- raise PlivoError, 'No user set for User'
697
- end
698
- super(body, attributes)
703
+ def initialize(body, attributes={})
704
+ if not body
705
+ raise PlivoError, 'No user set for User'
706
+ end
707
+ super(body, attributes)
708
+ end
699
709
  end
700
- end
701
710
 
702
711
 
703
- class Dial < Element
704
- @nestables = ['Number', 'User']
705
- @valid_attributes = ['action','method','timeout','hangupOnStar',
706
- 'timeLimit','callerId', 'callerName', 'confirmSound',
707
- 'dialMusic', 'confirmKey', 'redirect',
708
- 'callbackUrl', 'callbackMethod', 'digitsMatch',
709
- 'sipHeaders']
712
+ class Dial < Element
713
+ @nestables = ['Number', 'User']
714
+ @valid_attributes = ['action','method','timeout','hangupOnStar',
715
+ 'timeLimit','callerId', 'callerName', 'confirmSound',
716
+ 'dialMusic', 'confirmKey', 'redirect',
717
+ 'callbackUrl', 'callbackMethod', 'digitsMatch',
718
+ 'sipHeaders']
710
719
 
711
- def initialize(attributes={}, &block)
712
- super(nil, attributes, &block)
720
+ def initialize(attributes={}, &block)
721
+ super(nil, attributes, &block)
722
+ end
713
723
  end
714
- end
715
-
716
-
717
- class Conference < Element
718
- @nestables = []
719
- @valid_attributes = ['muted','beep','startConferenceOnEnter',
720
- 'endConferenceOnExit','waitSound','enterSound', 'exitSound',
721
- 'timeLimit', 'hangupOnStar', 'maxMembers',
722
- 'record', 'recordFileFormat', 'action', 'method', 'redirect',
723
- 'digitsMatch', 'callbackUrl', 'callbackMethod',
724
- 'stayAlone', 'floorEvent',
725
- 'transcriptionType', 'transcriptionUrl',
726
- 'transcriptionMethod', 'recordWhenAlone', 'relayDTMF']
727
-
728
- def initialize(body, attributes={})
729
- if not body
730
- raise PlivoError, 'No conference name set for Conference'
731
- end
732
- super(body, attributes)
724
+
725
+
726
+ class Conference < Element
727
+ @nestables = []
728
+ @valid_attributes = ['muted','beep','startConferenceOnEnter',
729
+ 'endConferenceOnExit','waitSound','enterSound', 'exitSound',
730
+ 'timeLimit', 'hangupOnStar', 'maxMembers',
731
+ 'record', 'recordFileFormat', 'action', 'method', 'redirect',
732
+ 'digitsMatch', 'callbackUrl', 'callbackMethod',
733
+ 'stayAlone', 'floorEvent',
734
+ 'transcriptionType', 'transcriptionUrl',
735
+ 'transcriptionMethod', 'recordWhenAlone', 'relayDTMF']
736
+
737
+ def initialize(body, attributes={})
738
+ if not body
739
+ raise PlivoError, 'No conference name set for Conference'
740
+ end
741
+ super(body, attributes)
742
+ end
733
743
  end
734
- end
735
744
 
736
745
 
737
- class Record < Element
738
- @nestables = []
739
- @valid_attributes = ['action', 'method', 'timeout','finishOnKey',
740
- 'maxLength', 'playBeep', 'recordSession',
741
- 'startOnDialAnswer', 'redirect', 'fileFormat',
742
- 'callbackUrl', 'callbackMethod',
743
- 'transcriptionType', 'transcriptionUrl',
744
- 'transcriptionMethod']
746
+ class Record < Element
747
+ @nestables = []
748
+ @valid_attributes = ['action', 'method', 'timeout','finishOnKey',
749
+ 'maxLength', 'playBeep', 'recordSession',
750
+ 'startOnDialAnswer', 'redirect', 'fileFormat',
751
+ 'callbackUrl', 'callbackMethod',
752
+ 'transcriptionType', 'transcriptionUrl',
753
+ 'transcriptionMethod']
745
754
 
746
- def initialize(attributes={})
747
- super(nil, attributes)
755
+ def initialize(attributes={})
756
+ super(nil, attributes)
757
+ end
748
758
  end
749
- end
750
759
 
751
760
 
752
- class PreAnswer < Element
753
- @nestables = ['Play', 'Speak', 'GetDigits', 'Wait', 'Redirect', 'Message', 'DTMF']
754
- @valid_attributes = []
761
+ class PreAnswer < Element
762
+ @nestables = ['Play', 'Speak', 'GetDigits', 'Wait', 'Redirect', 'Message', 'DTMF']
763
+ @valid_attributes = []
755
764
 
756
- def initialize(attributes={}, &block)
757
- super(nil, attributes, &block)
765
+ def initialize(attributes={}, &block)
766
+ super(nil, attributes, &block)
767
+ end
758
768
  end
759
- end
760
769
 
761
770
 
762
- class Message < Element
763
- @nestables = []
764
- @valid_attributes = ['src', 'dst', 'type', 'callbackUrl', 'callbackMethod']
771
+ class Message < Element
772
+ @nestables = []
773
+ @valid_attributes = ['src', 'dst', 'type', 'callbackUrl', 'callbackMethod']
765
774
 
766
- def initialize(body, attributes={})
767
- if not body
768
- raise PlivoError, 'No text set for Message'
769
- end
770
- super(body, attributes)
775
+ def initialize(body, attributes={})
776
+ if not body
777
+ raise PlivoError, 'No text set for Message'
778
+ end
779
+ super(body, attributes)
780
+ end
771
781
  end
772
- end
773
782
 
774
- class DTMF < Element
775
- @nestables = []
776
- @valid_attributes = ['async']
783
+ class DTMF < Element
784
+ @nestables = []
785
+ @valid_attributes = ['async']
777
786
 
778
- def initialize(body, attributes={})
779
- if not body
780
- raise PlivoError, 'No digits set for DTMF'
781
- end
782
- super(body, attributes)
787
+ def initialize(body, attributes={})
788
+ if not body
789
+ raise PlivoError, 'No digits set for DTMF'
790
+ end
791
+ super(body, attributes)
792
+ end
783
793
  end
784
- end
785
794
 
786
795
  end