plivo 0.2.3 → 0.2.4

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